切换或禁用/重新启用AngularJS手表
发布时间:2020-12-17 17:48:50 所属栏目:安全 来源:网络整理
导读:我需要能够在执行特定任务时忽略特定的手表.这是场景. 我在场上有几个观察者用于计算“总计”字段. 可以手动修改所有这些字段,这将触发计算“总计”字段的手表. 这些字段也可以从保存状态加载,这也会触发计算“总计”字段的手表. “总计”字段也可以手动覆盖
我需要能够在执行特定任务时忽略特定的手表.这是场景.
我在场上有几个观察者用于计算“总计”字段. 可以手动修改所有这些字段,这将触发计算“总计”字段的手表. 这些字段也可以从保存状态加载,这也会触发计算“总计”字段的手表. “总计”字段也可以手动覆盖,保存和加载. 当手动覆盖“总计”字段与其他字段一起加载时,会发生此问题.重新计算“总计”的手表将被触发,并覆盖手动覆盖的“总计”. 我需要能够在负载发生时忽略手表.有什么办法吗? 我知道可以使用在创建手表时传回的取消注册功能来禁用观察者,但是当您重新创建观察者时仍然知道它正在观看的数据已经改变. 注意:这是围绕该问题的业务逻辑的过于简化的描述.无法禁用手表需要大量工作. 这是一个显示问题的小提琴:jsfiddle.net/vGWZy/1/ 解决方法
您可以在特殊服务中存储观察者的回调和禁用,并使用服务方法绑定和解除绑定
代码示例 //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'); }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |