如果您能分享您的观点/体验,我将不胜感激。
假设您有一个包含多个小部件的视图,这些小部件共享一些数据(从服务器获取)。例如,我们可能在同一视图中有一个树,列表和面包屑小部件,当然,单个项的名称可以同时显示在多个小部件中。 我的问题是开发此类观点的最佳做法是什么? 具体做法是:
我猜所有这些问题都是以某种方式相关的,所以请随意以您喜欢的任何形式/顺序回答它们。
感谢。
答案 0 :(得分:3)
小部件完全独立吗?
我认为这对我们来说是一个太宽泛的问题,因为这实际上取决于小工具/指令的作用。你在问他们是否应该使用隔离范围吗?另请参阅When writing a directive in AngularJS, how do I decide if I need no new scope, a new child scope, or a new isolated scope?
他们通过......沟通吗?
同样,太宽泛,抱歉......这取决于指令的作用。除了您已经列出的方式,您还可以通过
进行沟通require: 'controllerNameHere'
。使用require
方法,您可以使用this
而不是$scope
在控制器上定义方法。此方法仅限于基本上单向通信:从具有require
的指令到它需要的指令。例如,在AngularJS主页上,pane
指令require
是tabs
指令。这允许pane
指令调用tabs
指令控制器上的方法,但tabs
指令不能调用pane
指令控制器上的方法。 (有关详情,请参阅'this' vs $scope in AngularJS controllers)如何传播更改通知
这取决于您的指令具有的范围类型。如果您使用scope: true
作为指令,则不必传播任何内容。它们都可以$watch
一些父范围属性(并且由于JavaScript原型继承的工作方式,所有指令都可以看到父范围属性)。如果您使用scope: {...}
,则可以使用'='或'@'来定义本地指令范围变量,并使用$watch
来观察它们。
如果您担心$ watch的表现(因为每个摘要周期至少评估一次),那么事件可能更合适。
需要考虑的另一件事是:您是否希望您的指令了解URL或只是范围属性?使用范围属性可能会使您的指令更具可重用性。