【发布时间】:2017-03-13 15:47:44
【问题描述】:
编辑/更新:
我忘记了 angular 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函数?
【问题讨论】:
-
1.为什么是
$watch? 2. 为什么$timeout? 3.“return always false”是什么意思? -
@zeroflagL 使用
$watch对变量 ui.shake (who was boolean) 进行竞价。 `$timeout` 用于等待 css 动画 Angular 比 html 快 -
Angular 1.5 提供
$onChanges,比$watch更可取。另一个重要的一点是变化的原因。如果例如通过单击可以收听该事件的按钮来更改该值。至于$timeout:你可以看看$animate,它可以在动画结束时调用函数。无论如何,如果你想保持原样,你需要用箭头函数替换function(){ this.ui.shake = false;,因为this不是这里的控制器。
标签: javascript angularjs ecmascript-6 angularjs-1.6