如何在没有隔离范围的情况下分隔范围?
how to separate scopes without isolate scope?
隔离范围很不方便,因为该指令停止从父范围继承。
所以现在当我想在同一范围内使用相同的指令时,我正在使用 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>
这样,两个指令的属性就不会混淆,而不必求助于隔离范围。
到目前为止,我还没有注意到这种方法有任何问题,但它看起来确实很老套..
有更好的方法吗?
如评论中所述,您可以使用:
scope: true
但是,如果您确实采用这种方法,我只想指出一个注意事项:
任何基于范围 属性 的对象,如果此指令创建的继承(即新范围)通过 'dotting' 更改对象上的 属性 (例如 someObj.name = 'some new value') 那么这也将反映在父范围中。
这方面的例子可以在这里看到:
http://plnkr.co/edit/A1hNG5EUr8vcCNOAEp7P?p=preview
因此,我同意采用隔离范围方法,通过“@”、“=”等传递您需要的任何属性是最好的。
隔离范围很不方便,因为该指令停止从父范围继承。
所以现在当我想在同一范围内使用相同的指令时,我正在使用 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>
这样,两个指令的属性就不会混淆,而不必求助于隔离范围。
到目前为止,我还没有注意到这种方法有任何问题,但它看起来确实很老套.. 有更好的方法吗?
如评论中所述,您可以使用:
scope: true
但是,如果您确实采用这种方法,我只想指出一个注意事项: 任何基于范围 属性 的对象,如果此指令创建的继承(即新范围)通过 'dotting' 更改对象上的 属性 (例如 someObj.name = 'some new value') 那么这也将反映在父范围中。 这方面的例子可以在这里看到:
http://plnkr.co/edit/A1hNG5EUr8vcCNOAEp7P?p=preview
因此,我同意采用隔离范围方法,通过“@”、“=”等传递您需要的任何属性是最好的。