AngularJs不允许在转发器中复制。关键:未定义

时间:2018-05-18 03:34:56

标签: angularjs

我一直试图解决这个角度ng-repeat问题但是得到了这个错误

  

不允许在转发器中重复。 Repeater:project.documentConfig.documents中的document by document.Name key:undefined

Html:

x=2

如果我将其更改为按$ index

进行追踪
<tr ng-repeat="project in translatorHubConfig.projects">
    <td>{{ project.ProjectName }}</td>
    <td>{{ project.SourceLanguage }}</td>
    <td>{{ project.TargetLanguage }}</td>
    <td>{{ project.Status }}</td>
    <td>
        <div ng-repeat="document in project.documentConfig.documents track by document.Name">
            <label>
                <input type="radio" value="{{document.Name}}" ng-model="project.documentConfig.documents" />
                <a ng-href="{{document.documentUrl}}" style="cursor: pointer;">{{ document.Name }}</a>
            </label>
        </div>
    </td>
    <td></td>
    <td><span class="train-project" ng-click="TrainProject(project.ProjectName, project.documentConfig.documents)" /></td>
</tr>

每次点击单选按钮都会产生这个:

Multiple radiobutton is created when click

响应:

<td>
    <div ng-repeat="document in project.documentConfig.documents track by $index">
        <label>
            <input type="radio" value="{{document.Name}}" ng-model="project.documentConfig.documents" />
            <a ng-href="{{document.documentUrl}}" style="cursor: pointer;">{{ document.Name }}</a>
        </label>
    </div>
</td>

我不太确定我做错了什么。 Tqvm in advanced。

3 个答案:

答案 0 :(得分:1)

在ng-repeat中使用track by $index,或者您可以使用具有所有唯一值的密钥。

答案 1 :(得分:0)

您无法使用将获得重复值的键来跟踪NG转发器,因此正确的方法是使用$ index,或者如果文档没有重复的对象,则无需跟踪。但是读取错误就像数组中的某些对象有未定义的'name'键,这就是为什么你有空的单选按钮。我没有得到你的问题,你期望发生什么?

答案 2 :(得分:0)

我不确定,但是问题是ng-model =“ project.documentConfig.documents” 当您单击单选按钮project.documentConfig.documents得到更新,并且ng-repeat尝试根据project.documentConfig.documents重新呈现html