2015-06-17 127 views
0

由于指令停止继承父范围,因此隔离范围不方便。如何分离没有隔离范围的范围?

所以现在,当我想用​​我使用ng-if该指令范围分开,像这样在同一范围内的同一指令:

<some-directive 
    ng-if="true" 
    var1="'wtva'" 
    var2="{{wtv2a}}" 
    var3="wtv2a" 
></some-directive> 

<some-directive 
    ng-if="true" 
    var1="'wtvb'" 
    var2="{{wtv2b}}" 
    var3="wtv2b" 
></some-directive> 

这样从两个指令的属性没有得到混合而不必诉诸隔离范围。

到目前为止,我还没有注意到这种方法的任何问题,但它看起来很诡异。 有没有更好的方法来做到这一点?

+3

为什么没有“诉诸隔离范围”?无论如何,可以通过在指令中指定'scope:true'来实现与'ng-if'相同的效果。 –

+0

使用可重用组件的独立作用域是一种很好的方法..如果你想传递作用域变量,那么你可以按照需求使用'=','@'&'' –

+0

只要你不使用作用域,那么我没有看到问题。否则,你需要定义一个子范围'scope = true'。但是如果你需要双向绑定,那么最好使用隔离范围。 – Michael

回答

1

正如在评论中提到,你可以使用:

scope: true 

不过,我想只是点出谨慎的一个区域如果你采取这种做法: 任何基于对象的属性的范围,如果由此指令创建的继承(即新范围)通过'dotting'更改对象的属性(例如someObj.name ='some new value'),那么这也将反映在父范围中。这 和例子可以在这里看到:

http://plnkr.co/edit/A1hNG5EUr8vcCNOAEp7P?p=preview

因此我会同意与分离范围的方法去,传递你需要通过哪个属性“@”,“=”,等会最好。