为什么角度ng-repeat为我的模型添加属性?

时间:2015-02-07 01:02:11

标签: angularjs

我正在开展角度1.2.x项目,我有一个使用ng-repeat和一组对象生成的单选按钮列表。

标记

<div ng-repeat="answer in question.answers track by $index">
    <label>
        <input type="radio" name="answers" ng-value="answer" ng-model="myDataModel">{{answer.text}}
    </label>
</div>

阵列

[
    {
        "id":"0",
        "parentId":"0a4540dfec6549b4a3bd1b8fb6169d77",
        "text":"peanuts"
    },
    {
        "id":"1",
        "parentId":"deka9fkac6549b4a3bd1b8fb6169d77",
        "text":"cashews"
    },
    {
        "id":"2",
        "parentId":"0a4540dfec6asdf4a3bd1b8fb6169d77",
        "text":"brazil nuts"
    }
]

如果我通过这样的无线电选择使用预标签来查看我的模型......

<pre>{{myDataModel | json}}</pre>

我看到随机属性会像我一样爬上我的数据

{
    "id":"0",
    "parentId":"0a4540dfec6549b4a3bd1b8fb6169d77",
    "text":"peanuts",
    "spc_mXSzO":0,
    "idx_mXSzO":0
}

当我从服务器加载数据后尝试预选单选按钮时,这会导致问题。当我的控制器将我的模型设置为等于其中一个答案时,它没有那些属性,因此它不会选择无线电。此外,每次刷新页面时,这些属性名称都会更改,因此我无法模拟它们。这些来自何处以及在预选答案时我可以尝试绕过它们?

2 个答案:

答案 0 :(得分:3)

好吧,我找到了罪魁祸首。这是图书馆https://github.com/isteven/angular-multi-select

它为了它的目的附加了spc和idx属性。

答案 1 :(得分:1)

我无法重现您所看到的内容 - 这里是您上面工作的傻瓜:

http://plnkr.co/edit/1td3XtqQjMDk1XYBbjEn?p=preview

您拥有的一个问题是输入标记中的ng-model指令。你不应该直接在$ scope上绑定原语。以下是对原因的详细描述:

https://github.com/angular/angular.js/wiki/Understanding-Scopes

您的代码更新:

<div ng-repeat="answer in question.answers track by $index">
  <label>
    <input type="radio" name="answers" ng-value="answer" ng-model="myDataModel.myAnswer" />{{answer.text}}
  </label>
</div>