Angular 1.6 ES6 $ watch

时间:2017-03-13 15:47:45

标签: javascript angularjs ecmascript-6 angularjs-1.6

修改/更新

我在角度1.6(正常方式)中忘记了原始代码:

http://codepen.io/darkiron/pen/qRJmaj

我想,这可以帮到你。 我的工作是转换为EcmaScript ES6。

谁工作得很棒!

如何在ES6 Angular控制器中使用$watch

  loginaction(){

    this.$scope.$watch('ui.shake', this.resetUiCheck());
    ....
 }

我试试这个,结果不是预期的

resetUiCheck(newValue, oldValue){    
    console.log(this.ui.shake);
    return () => {
        alert('foo');
        console.log(this);
        if(this.ui.shake == true){
            this.$timeout(function(){
                this.ui.shake = false;
            }, 1000);
        }
    };

}

总是假的!

我试试这个:

this.$scope.$watch('ui.shake', this.resetUiCheck);

结果就是这个错误

  

TypeError:无法读取属性' ui'未定义的

另一个问题:不应在Contoller构造函数中设置$watch函数吗?

3 个答案:

答案 0 :(得分:6)

您直接调用函数而不是在第二个参数中传递函数引用。

this.$scope.$watch('ui.shake',this.resetUiCheck.bind(this));

OR

this.$scope.$watch('ui.shake', (newValue, oldValue) => 
   this.resetUiCheck( newValue, oldValue)
);

你也可以用非常简单的形式写它

this.$scope.$watch('ui.shake', this.resetUiCheck);

但是你必须用箭头函数格式编写底层函数

resetUiCheck = (newValue, oldValue) => 
   this.resetUiCheck( newValue, oldValue)
);

答案 1 :(得分:2)

应该是:

select type, channel, teilnr, starttime, endtime, usedtime, host 
from online_time 
where starttime > (CURRENT - 15 UNITS MINUTE) 
order by starttime desc 

答案 2 :(得分:1)

首先,永远不要在控制器中使用$ watch。其次,你不需要$ watch。

$scope.ui.shake = true;
$timeout(function(){
    $scope.ui.shake = false;
}, 1000);