如何在AngularJS中“销毁”指令?

时间:2014-02-10 12:46:45

标签: javascript angularjs angularjs-directive

我正在使用指令来分隔实体的逻辑(例如,某个人)。

所以我有一个人员服务,存储一系列的人,如:

this.people = ["Person 1", "Person 2", "etc"];

然后,控制器注入该服务,并将数据发送到包含我的指令的模板。所以我的模板看起来像:

<div ng-repeat="person in people">
    <person name="person"></person>
</div>

现在,在我的指令中,我有一个删除函数(通过单击指令模板中的按钮来调用,看起来像这样(人员服务也注入指令):

delete People.people[id];

问题是,我的指令模板的其余部分保持不变。我想在删除时完全删除该指令。这怎么可能?我尝试使用ng-hide隐藏它,并在删除时将指令范围中的'deleted'属性设置为true,但保留空(无数据)指令模板。我已经调查了范围。$ destroy(),element.remove()等,但没有任何工作,文档中似乎没有任何内容......

如何从内部完全销毁/删除指令(即在调用删除函数时)?

小提琴:http://jsfiddle.net/VSph2/107/

单击“删除”,数据消失,但指令(和模板)仍然显示,显示“name:”。如何在删除时完全删除指令?

1 个答案:

答案 0 :(得分:2)

您正在删除对象,但数组中的空元素仍然存在,它只是空引用而不是指向现有对象。

使用

this.peopleIds.splice(this.peopleIds.indexOf(personId), 1);

将其从数组中删除,该元素将不再在for循环中呈现。

参考:How do I remove a particular element from an array in JavaScript?