我在app控制器中使用以下功能:
this.state = {
net: false,
netd: false,
network: function (active) {
if (active) {
this.state.net = true;
t = window.setTimeout(function () {
this.state.netd = true;
}.bind(this), 500);
} else {
window.clearTimeout(t);
this.state.net = false;
this.state.netd = false;
}
}.bind(this)
};
在我的孩子控制器中,我称之为:
app.state.network(true);
然后过了一段时间:
app.state.network(false);
在我的孩子HTML中,我查看net和netd,如下所示:
xx {{ app.state.net }} yy
xx {{ app.state.netd }} yy
按预期调用网络功能,我可以看到xx {{ app.state.net }} yy
从false更改为> true,但xx {{ app.state.netd }} yy
始终为false,即使调试器显示它在此处设置为true:this.state.netd = true;
有谁能告诉我为什么netd的状态似乎在我的浏览器中没有变化?
答案 0 :(得分:2)
您正在使用window.setTimeout()
函数,该函数在没有angularJS意识到的情况下更改对象。使用完全没有此问题的$timeout
service,或者每次因非角度事件而更改值时,请手动调用$scope.$apply()
。
答案 1 :(得分:0)
你不想在{8}执行"外面"时使用setTimeout()
和AngularJS(generally speaking)。角度。
而不是使用setTimeout
window.setTimeout(function () {
this.state.netd = true;
}, 500);
使用angular $timeout
服务
$timeout(function() {
this.state.netd = true;
}, 500);