要求并行指令控制器不创建父控制器

时间:2015-01-13 18:57:51

标签: javascript angularjs angularjs-directive controller

问题: 是否有可能在两个并行指令之间建立直接连接,而不是创建工厂,父指令或发射/广播,而只是直接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";
          }
        }
    });

1 个答案:

答案 0 :(得分:1)

我认为没有一种好方法可以实现这种“远距离行动”。如果没有某种父子关系,你的指令就没有办法找到对方(如果你有两个directiveB s,Angular会做什么?)。您最好的选择可能是使用服务让这些指令进行通信。它不会改变HTML标记,它会明确表明它们具有共同依赖性。

明确回答您的问题:require关系仅在指令及其祖先之间。