修改/更新
我在角度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
函数吗?
答案 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);