javascript - angular一代,不同directives之间怎么操作$interval?
巴扎黑
巴扎黑 2017-04-11 12:42:08
[JavaScript讨论组]

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


巴扎黑
巴扎黑

全部回复(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吧
            });
        }
    };
});
PHP中文网

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

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

$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开关。 这个你监控控制器里的值就可以了啊。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号