2016-08-20 47 views
0

我在页面上有一个单选按钮,其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属性失败了。

回答

0

因此,我花了一点时间和这个,并放在一起简单的小提琴。事实证明,Angular只是在将对象存储为ng值时才考虑引用,所以我的建议其实是正确的。存储基元时,可以用不同的值初始化模型,但是当存储对象时,需要存储对实际模型条目的引用!