【发布时间】:2016-08-26 06:39:38
【问题描述】:
我对 AngularJs 完全陌生,但我已经设法学习了框架的基础知识。然而,我最近遇到了 AngularJs 的一种奇异行为,它以动态性着称。
问题来了:
Index.html
<div ng-controller="userClick as clk">
<div id="square1">{{ clk.board[0] }}</div>
</div>
app.js
app.controller('userClick', function($timeout) {
this.board = ['', '', '', '', '', '', '', '', ''];
$timeout(reset, 1000);
function reset (){
this.board = ['', '', '', '', '', '', '', '', ''];
console.log(this.board); //returns ^^ (empty array)
}
预计当用户点击页面上的一个方块时,会执行一个函数并且一切顺利。但是,当我尝试使用 $timeout 函数将响应延迟一秒钟时,数组 this.board 成功重置为空数组,但 div 与id square1 不会再次变空。
似乎有些东西导致 Angular 在这一点上是静态的,我不明白。
注意:这是一款井字游戏。
【问题讨论】:
-
this内部 reset() 函数与外部函数this不同。与 angular 无关,是 javascript 范围问题 -
那么如何更改具有正确范围的板阵列??
-
在控制器中存储对变量中
this的引用,并在函数内部使用该变量而不是this。见github.com/johnpapa/angular-styleguide/blob/master/a1/… -
@charlietfl 非常感谢,终于成功了!!
标签: jquery angularjs dynamic timeout