我在页面上有一个单选按钮,其ng值设置为" answer"宾语。该变量的模型被设置为隶属数组的特定元素。数据结构如下所示:
var user = { affiliations: [ {question: ..., answers: ... }, ... ] }
通过这种方式,每个"从属关系"有一个问题和一个或多个答案。我试图在AngularJS中为此创建一个UI,如下所示:
<form name='affiliationsForm'>
<div ng-repeat="(i, affiliation) in DS_OrgAffiliations">
<h6>{{affiliation.question.name}}</h6>
<div ng-if="affiliation.question.questionType=='MultipleAnswer'">
...
</div>
<div ng-if="affiliation.question.questionType=='SingleAnswer'">
<label ng-repeat="answer in affiliation.answers">
<div>
<input type="radio" ng-model="$parent.DS_User.affiliations[i].answers" name="{{affiliation.question.name}}" ng-value="answer"> {{answer.answer}} </input>
</div>
</label>
</div>
</div>
<button data-ng-click="submitAffiliations()">save</button>
在我的模型上,这实际上非常有效。我有一些胶水代码可以处理多项选择问题和单个问题之间的差异,如果我对此表单进行更改,模型会毫无问题地反映更改。
问题是在页面上初始化表单时,永远不会检查正确的单选按钮。模型将在“答案”中显示答案对象。财产,但表格并不反映该价值。更重要的是,选择一个单选按钮可为我们的模型指定正确的答案,如果我选择应该是活动的单选按钮,模型似乎不会改变。
我认为正在发生的事情是,该模型正在使用正确答案的深层副本进行初始化。尽管对象具有相同的内容,但是这个引用不同的事实导致了一个问题,而不是一个浅的副本。
这是对的吗?为了测试这个理论,我这样做了:
<input type="radio" ng-model="$parent.DS_User.affiliations[i].answers" name="{{affiliation.question.name}}" ng-value="answer" ng-checked="$parent.DS_User.affiliations[i].answer.answer==answer.answer"> {{answer.answer}} </input>
请注意,ng-checked属性正在检查答案的成员以确保相似性。不幸的是,这也无法在页面加载时默认正确的单选按钮。
对此有何见解?我花了大约一个半小时玩这个,我的参考解释似乎很可能,但是由于ng-checked属性让我失望,我还没能找到一个可以拉线的线程。
答案 0 :(得分:0)
所以我花了一点时间用这个,并把一个简单的小提琴放在一起。事实证明,Angular只在考虑以ng值存储对象时考虑引用,所以我的建议实际上是正确的。存储基元时,可以使用不同的值初始化模型,但在存储对象时,需要存储对实际模型条目的引用!