AngularJS:如何在指令的$ scope对象属性上添加setter?

时间:2017-01-18 10:05:01

标签: javascript angularjs angularjs-directive angularjs-scope getter-setter

这是我目前使用 $ watch 来解决对customVar回调的问题......

module.directive('mudirective', function() {
    return {
        scope: {
            callback: '&'
        },
        template: '<h1>Hello</h1><button ng-click="changeVaar()>Click</button>"',
        controller: function($scope) {
            $scope.customVar = false;
            $scope.changeVaar = function() {
               // some large logical execution
               // which set customeVar
               $scope.customVar = '';//some value assgined
            };
        },
        link: function($scope) {
            $scope.$watch('customVar', function() {
                $scope.callback();
            });
        }
    };
});

但我想替换这个$watch with setter ...

任何人都可以知道它怎么可能?

OR

avoid $watch功能的其他选项,但{v> fire callback更改

  

但是一旦确认 customVar ,回调就应该触发   指令本身也发生了变化。

1 个答案:

答案 0 :(得分:0)

首先,我将回答问题下的评论。我有一个用例,当我看到一个控制器将观察者放置在一个作用域值上,以仅检测更改时,而仅通过控制器本身内部的分配来更改该值。

手表正在调用一个函数,该函数根据分配的值(无论是否为空,无论如何)来更新UI。

当然,我们可以在每次分配时调用此函数。或者将手表替换为设置参数值的函数,然后调用该函数。但是以某种方式,使用二传手更“透明”,进行了最少的更改,并且您一定不会错过任务。

事后看来,它与MobX的工作方式类似(如果您需要进行复杂的依赖监视,请参阅此库)。

第二,这是操作方法:

Object.defineProperty($scope, 'watchedValue',
{
    set(newValue) { $scope._watchedValue = newValue; this.doSomethingWith(newValue); },
    get() { return $scope._watchedValue; },
});