需要并行指令控制器 w/o 创建父控制器
require a parallel directives controller w/o creating a parent controller
问题:
是否有可能在两个并行指令之间建立直接连接 w/o 创建一个工厂,父指令或 emit/broadcast 但只是直接 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::指令-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::指令-b
angular.module('carouselApp')
.directive('directiveA', function () {
return {
templateUrl: 'views/modal/directiveB.html',
controller: function($scope){
this.updateStoreB = function(storeID){
$scope.storeB = storeID+"storeB";
}
}
});
我认为没有什么好的方法可以做到这一点 "action at a distance"。如果没有某种父子关系,您的指令就无法找到彼此(如果您有两个 directiveB
,Angular 会做什么?)。您最好的选择可能是使用服务让这些指令进行通信。它不会更改 HTML 标记,并且会明确表明它们具有相互依赖性。
明确回答您的问题:require
关系仅存在于指令与其祖先之间。
问题:
是否有可能在两个并行指令之间建立直接连接 w/o 创建一个工厂,父指令或 emit/broadcast 但只是直接 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::指令-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::指令-b
angular.module('carouselApp')
.directive('directiveA', function () {
return {
templateUrl: 'views/modal/directiveB.html',
controller: function($scope){
this.updateStoreB = function(storeID){
$scope.storeB = storeID+"storeB";
}
}
});
我认为没有什么好的方法可以做到这一点 "action at a distance"。如果没有某种父子关系,您的指令就无法找到彼此(如果您有两个 directiveB
,Angular 会做什么?)。您最好的选择可能是使用服务让这些指令进行通信。它不会更改 HTML 标记,并且会明确表明它们具有相互依赖性。
明确回答您的问题:require
关系仅存在于指令与其祖先之间。