我在页面上有一个单选按钮,其ng值被设置为“answer”对象。该变量的模型被设置为隶属关系数组的一个特定元素。数据的结构看起来是这样的:Angular 1.5单选按钮模型
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属性失败了。