我想把几个较小的指令放在一起构建更大的指令。什么是最好的方式,因为指令必须沟通,但不要相互冲突。我把更小的例子放在一起,显示了我的意思。因此,如果给出以下代码,如何在不aaa
指令设置bbb
的情况下使用scope : false
访问bbb
?
HTML
<div ng-app="myApp">
<script type="text/ng-template" id="aaa.html">
<div ng-form name="loginFields">
<input ng-model="aaa" type="text" name="bbb" />
</div>
</script>
<script type="text/ng-template" id="bbb.html">
<form name="rankings" novalidate>
<pre>{{aaa}}</pre>
<div aaa></div>
</form>
</script>
<div bbb></div>
</div>
使用Javascript:
app.directive("aaa", ["loginService",
function(loginService) {
return {
templateUrl: "aaa.html",
replace: true,
scope: true,
link: function(scope, elem, attrs) {
}
};
}
]);
app.directive("bbb", [
function(rankingsService, $rootScope) {
return {
templateUrl: "bbb.html",
replace: true,
scope: true,
link: function(scope, elem, attrs) {
}
};
}
]);
答案 0 :(得分:1)
为两者定义父控制器(例如在ng-app div中)。 在父控制器中定义共享项。 两个指令都不应该使用隔离范围(这样,他们可以看到父范围内的什么)。 你做完了 实际上,如果只有aaa更改数据,您可以保持隔离并让bbb查看数据。 但是你需要在aaa范围定义中定义2路绑定(范围:{myvar:'='})
为两者定义父控制器(例如在ng-app div中)。 当aaa更改数据时(使用$ scope。$ watch或其他东西),发出一个事件($ scope。$ emit('my event',myData); 让父范围捕获事件并向下广播另一个事件($ scope。$ broadcast('my event2',myData) 让bbb听取事件2来获取数据($ scope。$ on('my event2',function(event,myData){})