angularjs ng当模板包含另一个ng重复时,重复留下html

时间:2014-09-03 19:48:39

标签: angularjs angularjs-ng-repeat

我有一个控制器,其中有一组人 mainCtrl.People 。每个人都有一系列电话号码。

的index.html

<div ng-repeat="people in mainCtrl.People">
    <ng-person data-json-pack={{people}}></ng-person>
</div>

我的人员模板显示姓名和电话号码列表,如下所示:

<div class="border">
    <p>{{personCtrl.Name}}</p>
    <div ng-repeat="telno in personCtrl.TelNos">
        <p>{{telno}}</p>
    </div>
</div>

当我向mainCtrl.People添加元素时,会出现一个新指令。

当我拼出一个元素时,大多数指令都消失了,但有些位留下了:

<div class="border ng-isolate-scope">
     <p>{{personCtrl.Name}}</p>
     <!-- ngRepeat: telno in personCtrl.TelNos -->
</div>

我知道angularjs可以留下html评论,但在这种情况下,它不仅仅是评论。它对用户可见为空边框。

当重复的模板中有重复时会发生这种情况。我做错了什么?

2014年9月9日编辑

这是一个演示问题的傻瓜:

http://plnkr.co/edit/RQiMww1Rl8gzG6W5COuT?p=preview

演示是一个带有产品列表的商店模块。该按钮从列表中删除最后一个产品。它只运作一次!

1 个答案:

答案 0 :(得分:1)

我会假设 - 这是假设等待您的更多信息 - 对指令的绑定是问题。

你可能正在做类似

的事情
scope: {
  jsonPack: '@'
}

从它的外观来看,获取一个字符串并从中解压缩json?再说一次,没有更多的代码就不确定了。

设置双向绑定,如

scope: {
  jsonPack: '='
}

直接获取对象(不转换为json进行传输)应解决您的问题。

此外,您必须将您的html更改为<ng-person data-json-pack="person">,这会将您的指令发送给整个人物对象。

让我知道它是否有效,或以我的方式发送更多信息。

编辑:在上面的内容中,你正在做:

this.model.products.splice(this.model.products.length - 1, 1, null);

表示您要插入null代替最后删除的产品。这将告诉angular尝试将最后一个数组项呈现为产品。你应该做的是:

this.model.products.splice(this.model.products.length - 1, 1);

这只是意味着从products数组中删除最后一个元素。问题不在于渲染,而是在你最后的模型修改中。