Jas*_*son 8 javascript angularjs angularjs-directive angularjs-scope
我试图在angularjs中围绕范围,尤其是在使用指令的模块上调用回调时.我找到了3种不同的方法来完成同样的事情,我试图了解每种方法的优缺点.
什么时候直接在父母身上使用&,=或调用函数?
我更喜欢使用'='符号绑定,因为指令和托管指令的模块中需要的代码较少,但根据文档(了解Transclusion和Scopes),似乎使用the绑定回调&是首选方法,为什么?
好问题.应首先从试图分离您的疑虑的角度做出这些决定.因此我们必须消除在父作用域上调用方法 - 指令必须对父进程有太多了解.
接下来,我们看看目的.根据定义,回调是方法.&在父作用域的上下文中计算表达式,而双向绑定只是一个变量名.&是很多更强大,让你的指令,更给用户灵活使用.当然,他们可以这样做,就像你的例子:
<my-dir cb="callMe()"></my-dir>
但他们也可以这样做:
<my-dir cb="myVar = false"></my-dir>
我们不必传入变量的名称 - 它是任何 AngularJS 表达式.因此,组件的用户可以以适合他们的任何方式自由地对您的事件做出反应.真棒!
而且,该指令可以对状态变化做出反应.例如,您可以检查条件:
<my-dir cb="myVar"></my-dir>
并且myVar可以评估任何值,并且可以随时更改您的指令并做出相应的反应.您不是共享变量,而是共享表达式.在这种情况下,双向绑定可以工作,但如果指令不(也可能不应该)更改该变量,为什么我们需要双向绑定?
但同样,它不一定是一个变量.如果表达式的计算结果为true或false?
<my-dir cb="myVar == myOtherVar"></my-dir>
我们的指令不必关心如何父范围到达的值-只有物品的价值最终是.
因此,我们可以使用它作为父作用域对指令作出反应或使用指令对父作出反应 - 所有这些都使用灵活的表达式.整齐.
所以,=是为了确保数据绑定; 它确保使用指令的范围和指令本身在某个变量上保持同步.&允许在父作用域的上下文中计算表达式,并允许指令或父作用域对潜在的复杂状态更改作出反应.
| 归档时间: | 
 | 
| 查看次数: | 929 次 | 
| 最近记录: |