在ES6中使用$ scope.$ watch

use*_*ert 1 javascript angularjs ecmascript-6

我在ES6项目中使用$ scope.$ watch时遇到了一些问题.手表发射一次,然后再也不会发射.

这是代码:

export class SomeController {
  constructor($log, $scope) {
    'ngInject'
    this.watched = 1;
    $scope.$watch('watched',(nv,ov)=>{
        $log(nv); //only fires once
    });
   }
  otherMethods(){}...
}
Run Code Online (Sandbox Code Playgroud)

具体来说我使用的是这个发生器:https://github.com/Swiip/generator-gulp-angular

Lul*_*ulu 5

你可以试试这个:

$scope.$watch(() => this.watched, function (nv, ov) {
  console.log(nv);
});
Run Code Online (Sandbox Code Playgroud)

正如这里解释的那样.

这是一个演示的小提琴.

而且,事件会在$digest周期中触发:

  • DOM事件(用户更改输入字段的值,单击按钮以调用JavaScript函数等)

  • XHR响应触发回调

  • 浏览器的位置发生了变化

  • 触发器(setTimout,setInterval)触发回调

或者如果你明确地称它.