为什么不能通过异步回调设置控制器属性?

时间:2018-08-29 22:05:39

标签: javascript angularjs

考虑以下简单的代码。

index.html

<!doctype html>
<html lang="en" ng-app="app">
    <head>
        <meta charset="utf-8">      
        <script src="angular/angular.js"></script>
        <script src="app.js"></script>
    </head>
    <body ng-controller="RootController as controller">
        <input ng-model="controller.variable" />
    </body>
</html>

app.js

"use strict";

const app = angular.module("app", []);

app.controller(
    "RootController",
    class
    {
        constructor()
        {
            this.variable = "apples";
            setTimeout(
                () => this.variable = "oranges",
                0
            );
        }
    }
);

我希望发生的是,控制器上的variable属性基本上会立即设置为“橙色”,并且此更改将在视图中立即可见。这不是会发生的事情。相反,即使setTimeout被触发,值“ oranges”也不会立即可见。如果单击<input />以使其聚焦,然后在其外部单击以使其散焦,则然后呈现新的“橙色”值。

是什么解释了此行为,以及如何从异步回调内部正确设置控制器值?

0 个答案:

没有答案