我有一个控制器,其中有一组人 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
演示是一个带有产品列表的商店模块。该按钮从列表中删除最后一个产品。它只运作一次!
答案 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数组中删除最后一个元素。问题不在于渲染,而是在你最后的模型修改中。