如何从一个指令到另一个指令进行通信

时间:2014-07-16 10:29:00

标签: angularjs angular-directive

我有两个指令,一个用于ng-grid,另一个用于分页,当我在一个指令中点击页码时,ng-grid指令应该根据它改变,我能不知道。

1 个答案:

答案 0 :(得分:0)

有很多方法可以实现它: 例如:

第一个解决方案

您可以在指令之间共享数据:

<directive-one attribute="value" other-attribute="value2" shared-variable="yourData">
<directive-two shared-variable="yourData">

并在该值的第一个指令中设置$watch

scope.$watch('yourData',function(newVal,oldVal){ //your logic called after change });

第二个解决方案

您可以使用活动:

app.directive('first',function(){
    return{
        restrict: 'E',
        template: 'Im first directive!',
        scope: true,
        link:function(scope,elem,attrs){
            scope.$on('event',function(event,args){
               alert(args); 
            });
        }
    }    
});

app.directive('second',function($rootScope){
    return{
        restrict: 'E',
        template: 'Im second directive! <button ng-click="click()">click me!</button>',
        scope: true,
        link:function(scope,elem,attrs){
            scope.click = function(){
                $rootScope.$broadcast('event','hello!');    
            };

        }
    }    
});

事件由$rootScope.$broadcast('event','hello!');发送。这意味着事件由根范围向下发送到子范围。 http://jsfiddle.net/aartek/fJs69/