angularjs在他的兄弟面前加载一个兄弟指令

时间:2015-03-13 11:31:07

标签: angularjs angularjs-directive

我在同一层次结构中有两个指令:directive1和directive2 我希望directive2在directive1之前执行他的控制器而不改变html指令层次结构



app.directive('directive1', [function() {
    return {
      restrict: 'E',
      scope: {
      },
      templateUrl: 'My/views/directive1.html',
      controller: ['$scope', function ($scope) {
        console.log("Controller of Directive 1");
      }]
    }
  }]
)

app.directive('directive2', [function() {
    return {
      restrict: 'E',
      templateUrl: 'My/views/directive2.html',
      controller: ['$scope','$timeout', function ($scope,$timeout) {
        console.log("Controler of Directive 2");
      }]
    }
  }]
);

<div ng-controller="test" >
  <directive1></directive1>
  <directive2></directive2>
</div>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

我的第一个问题是为什么??,但理论上你可以添加一个超时,它会将指令推送到堆栈的末尾。等待你正在寻找的指令中的广播事件...等等:

    app.directive("firstDir", function(){
    return {
        restrict : 'E',
        controller : function($scope){        
            this.data = 'init value';

            this.set = function(value){
             //EMIT THE EVENT WITH DATA
              $scope.$emit('FIRST_DIR_UPDATED', value);
                this.data = value;
                // communication with second Directive ???
            }       
        },
        controllerAs : 'firstCtrl'
    };  
});

app.directive("secondDir", function(){
    return {
        restrict : 'E',
        controller : function($scope){    
          var _that = this;
          //LISTEN TO THE EVENT 
          $scope.$on('FIRST_DIR_UPDATED', function(e, data){
                 _that.data = data;
          });
          this.data = 'init value';   
        },
        controllerAs : 'secondCtrl'
    };  
});

这是来自answer

的POC

所以这个想法是一个指令发出或广播一个消息而另一个捕获是..你还可以添加一个标志,这样就会发生这种情况

这就是你要找的东西吗?