如何在不使用$ scope的情况下对变量应用观察器?

时间:2017-05-15 07:34:02

标签: angularjs

有没有办法在不使用$ scope的情况下观察变量的变化值?我的经理告诉我,我们可能会将代码迁移到没有$ scope的angular2,所以我们必须编写代码,这样当我们将它迁移到angular2时,它只需要很少的更改。所以现在我想跟踪一个变量的跟踪变化,我们这样做的角度如下:

  $scope.$watch('myVar', function() {
    alert('hey, myVar has changed!');
});

现在我希望这个像

app.controller('auditCtrl',
    function($scope, $localStorage) {
        var adc = this;

        angular.extend(this, {
                $state: $state,
                count: 0
            }

            //What i want is something like
            abc.$watch('count', function() {
                alert('hey, count has changed!');
            });
        })

1 个答案:

答案 0 :(得分:3)

不,那不可能。但问问自己,你想要$watch的变量是什么?如果是表单字段,则只需使用ng-change即可。

如果您可以使用es2015语法,您可以在控制器原型上添加Getters和Setter,然后触发update功能。 像这样:

let auditCtrl = function () {
  const adc = self;
  adc.counterItem = null;

  // etc.
};

Object.defineProperty(auditCtrl.prototype,
    "counterItem", {
    get: function () {
      return this.counterItem;
    },
    set: function (newValue) {
      this.counterItem = newValue;

      // Call method on update
      this.onCounterItemChange(this.counterItem);
    },
    enumerable: true,
    configurable: true
});

或者,在我看来,最好的方法是为您的应用程序使用组件架构。使用组件,您可以使用一些内置生命周期钩子,例如$onInit$onChanges等。这样,您也可以使用angular2方式进行思考,因为您可能希望迁移。