加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

切换或禁用/重新启用AngularJS手表

发布时间:2020-12-17 17:48:50 所属栏目:安全 来源:网络整理
导读:我需要能够在执行特定任务时忽略特定的手表.这是场景. 我在场上有几个观察者用于计算“总计”字段. 可以手动修改所有这些字段,这将触发计算“总计”字段的手表. 这些字段也可以从保存状态加载,这也会触发计算“总计”字段的手表. “总计”字段也可以手动覆盖
我需要能够在执行特定任务时忽略特定的手表.这是场景.

我在场上有几个观察者用于计算“总计”字段.

可以手动修改所有这些字段,这将触发计算“总计”字段的手表.

这些字段也可以从保存状态加载,这也会触发计算“总计”字段的手表.

“总计”字段也可以手动覆盖,保存和加载.

当手动覆盖“总计”字段与其他字段一起加载时,会发生此问题.重新计算“总计”的手表将被触发,并覆盖手动覆盖的“总计”.

我需要能够在负载发生时忽略手表.有什么办法吗?

我知道可以使用在创建手表时传回的取消注册功能来禁用观察者,但是当您重新创建观察者时仍然知道它正在观看的数据已经改变.

注意:这是围绕该问题的业务逻辑的过于简化的描述.无法禁用手表需要大量工作.

这是一个显示问题的小提琴:jsfiddle.net/vGWZy/1/

解决方法

您可以在特殊服务中存储观察者的回调和禁用,并使用服务方法绑定和解除绑定

代码示例
http://jsfiddle.net/snicksnk/66osj8zm/

//Service for working with watcher's binding
var watchService = {
    watchers: {},create: function(name,callback){

        watchService.watchers[name] = 
        {
            'callback': callback,'disableCallback': null
        };
    },enable: function($scope,name){
        if (typeof watchService.watchers[name]['callback'] !== 'function'){
            return;
        }
        watchService.disable(name);
        var watcher = watchService.watchers[name]['callback'];
        watchService.watchers[name]['disableCallback'] = $scope.$watch(name,watcher,true);


    },disable: function(name){
        if (typeof watchService.watchers[name]['disableCallback'] !== 'function'){
            return;
        }
        watchService.watchers[name]['disableCallback']();
    }
};

//Creating of watcher's callbacks,instead of using $scope.$watch directly
watchService.create('item.value1',function() {
    $scope.item.total = $scope.item.value1 * $scope.item.value2;
});


watchService.create('item.value2',function() {
    $scope.item.total = $scope.item.value1 * $scope.item.value2;
});



//Wathcers enabler
$scope.enableWatchers = function(){
    watchService.enable($scope,'item.value1');
    watchService.enable($scope,'item.value2');
};

//Wathcers disable
$scope.disableWatchers = function(){
    watchService.disable('item.value1');
    watchService.disable('item.value2');
};

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读