为什么AngularJS无法识别我变量的值发生了变化?

时间:2014-05-17 05:55:10

标签: angularjs

我在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的状态似乎在我的浏览器中没有变化?

2 个答案:

答案 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);