问题:
是否有可能在两个并行指令之间建立直接连接,而不是创建工厂,父指令或发射/广播,而只是直接require: 'directiveA'
注意: 如果我对这个请求感到愚蠢,请告诉我......我只是喜欢这个想法的可读性并且好奇它是否可行?
在这里,我有两条与另一条指令平行的指令。
HTML:
<div directive-a>
<!-- 1. that also has a click event-->
<div ng-click="updateStore('1234')">click to update store</div>
<p>{{storeDataA}}</p>
</div>
<div directive-b>
<!-- 2. this will display the updated storeID -->
<p> {{newStoreDataB}}</p>
</div>
JS :: directive-a
angular.module('carouselApp')
.directive('directiveA', function () {
return {
templateUrl: 'views/modal/directiveA.html',
//note this require statement.
require: 'directiveB',
link: function (scope, el, attrs, ctrl) {
scope.updateStore = function(storeID){
scope.storeDataA = storeID;
ctrl.updateStoreB(storeID)
};
}});
JS :: directive-b
angular.module('carouselApp')
.directive('directiveA', function () {
return {
templateUrl: 'views/modal/directiveB.html',
controller: function($scope){
this.updateStoreB = function(storeID){
$scope.storeB = storeID+"storeB";
}
}
});
答案 0 :(得分:1)
我认为没有一种好方法可以实现这种“远距离行动”。如果没有某种父子关系,你的指令就没有办法找到对方(如果你有两个directiveB
s,Angular会做什么?)。您最好的选择可能是使用服务让这些指令进行通信。它不会改变HTML标记,它会明确表明它们具有共同依赖性。
明确回答您的问题:require
关系仅在指令及其祖先之间。