2016-08-20 7 views
0

ng値が「回答」オブジェクトに設定されているページにラジオボタンがあります。その変数のモデルは、系列配列の特定の要素に設定されています。データの構造は次のようになります。角1.5ラジオボタンモデル

var user = { affiliations: [ {question: ..., answers: ... }, ... ] } 

このように、各「所属」には質問と1つ以上の回答があります。私はそうのような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> 

、これは実際には非常に適しています。私は多肢選択式の質問と単一の質問の違いを処理する小さなグルーコードを持っています。このフォームに変更を加えると、モデルは問題なく変更を反映します。

問題はフォームがページ上で初期化されるとき、正しいラジオボタンはチェックされません。モデルは答えオブジェクトを 'answers'プロパティ内に表示しますが、フォームはその値を反映しません。さらに、ラジオボタンを選択するとモデルに正解が割り当てられ、アクティブなラジオボタンを選択すると、モデルは変更されないように見えます。

私は、モデルが浅いコピーではなく、正しい「回答」オブジェクトのディープコピーで初期化されていると思います。この参照が異なるという事実は、同じ内容のオブジェクトです。

これは間違いありませんか?この理論をテストするために、私はこれを行いました:

<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属性は類似性を保証するために回答のメンバーをチェックしています。残念ながら、これはページの読み込み時に正しいラジオボタンをデフォルトに設定することもできません。

これについての洞察はありますか?私はこれで約1時間半を費やしていましたが、私の参照の説明はおそらくそうでしたが、ng-checked属性が失敗したためにスレッドを見つけることができませんでした。

答えて

0

私はこれにもう少し時間を費やし、簡単なフィドルをまとめました。結果として、Angularはオブジェクトをng-valueに格納するときにのみ参照を考慮するので、私の提案は実際には正しいものでした。プリミティブを格納するときは、異なる値でモデルを初期化することはできますが、オブジェクトを格納するときは、実際のモデルエントリへの参照を保存する必要があります。

関連する問題