angular一代,不同directives之间怎么操作$interval?

有2个兄弟指令<hello>和<world>,hello指令操作后world指令的数据,使得world指令的数据发生变化,从而改变UI界面。
现在world指令里有2个定时任务,hello指令要怎么停止world指令里的定时任务再重新打开或者重新设定定时任务?
html:

<hello></hello>
<world></world>
阅读 2.7k
2 个回答

是这样的,在angular1中,我们可以通过事件系统来搭建两个不同指令之间的“桥梁”

在你的case里,你就可以在hello指令里,先注入$rootScope,然后通过她向下广播一个事件,例如:

$rootScope.$broadcast('stop-interval');

然后在world指令中,拿到link函数的第一个参数scope,然后通过她注册一个stop-interval的事件监听,例如:

app.directive('world', function(){
    return {
        restrict: 'e',
        scope: {},
        link: function(scope, element, attrs){
            scope.$on('stop-interval', function(){
                //在这里,放心大胆的取消你之前已经开启的interval吧
            });
        }
    };
});

你描述的第一句话,我读了两遍,都没看明白……不过大概知道意思,希望能帮到你。

首先,这两个指令如果在某个控制器内,你可以传递相同的属性来进行数据的控制。比如:

$scope.value = someValue;

<world prop="value"></world>
<hello prop="value"></hello>

这样,任意指令里的值改变都可以监控的到。

当然,你也可以给这两个指令单独写一个控制器指令,也就是父指令。比如:

app.directive('fatherDirective',function(){
    return{
        restrict:'AE',
        controller : ['$scope',function($scope){
            this.set = function(){
                ...
            };
            this.get = function(){
                ...
            };
        }]
    }
})

,然后再在你的子指令里去require:'^fatherDirective'。
这样也可以实现封装然后在内部单独处理数据。

其次说改变UI,当然在控制器内,绑定对应的ng-class or ng-style, ng-show 等等都可以实现控制UI变化,如果是一整片的代码,则最好抽离出来做成单独的模板文件或者放到$tempalteCache里都可以。

最后说实现$interval开关。 这个你监控控制器里的值就可以了啊。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题