我有两个指令,一个用于处理列表,另一个用于在列表中创建项目。问题是创建项目的指令可以在dom中的任何位置创建。当我创建了一个项目时,如何告诉另一个指令更新列表以便列出新项目?
create-directive有一个名为createItem的函数,它应该调用另一个list-directives函数“updateList”。我有一个服务,两者都可以使用,但我宁愿不在服务范围内摆弄。
我在这里错了吗?两者都是真正需要的可重用性,但由于它们的范围是最接近的兄弟姐妹,因此很难从彼此接触它们。
答案 0 :(得分:1)
你可以做的是使用角度事件来触发" updateList"功能
让list-directive听取这样的事件:
//Whenever the 'update-list' event is broadcasted, the updateList() function will be called
scope.$on('update-list', updateList);
要从create-directive广播事件,您需要注入$ rootScope。有了它,您现在可以触发事件:
$rootScope.$broadcast('update-list');
虽然在这种情况下事件正常,但请谨慎使用它们。如果您的应用程序中存在太多事件,则可能很难弄清楚在何处以及为什么会发生什么。
您可以使用的替代方法是完全管理两个指令使用的服务中的列表。在list-directive中,您可以绑定到服务中的列表,这样只要服务中的列表发生更改,它就会自动更新。因此,您不需要从服务中更改指令范围内的内容,这应该避免。