javascript - AngularJS $scope 不会在回调函数中更新吗?

标签 javascript angularjs

我有这个简单的片段:

HTML:

<div ng-app="myApp" ng-controller="SampleController">
   <p>{{val1}}</p>
   <p>{{val2}}</p>
   <input type="button" value="Update" ng-click="update()" />
</div>

Javascript:

var app = angular.module('myApp', []);

app.controller('SampleController', ['$scope', function($scope) {

    $scope.val1 = "Not updated";
    $scope.val2 = "Not updated";

    $scope.update = function () {
        $scope.val1 = "Updated outside!";

        setTimeout(function () {
            $scope.val2 = "Update inside!";
        }, 1);
    };
}]);

片段也在jsfiddle中.

如果我单击更新按钮,则 html 中仅更新值 val1。如何解决这个问题?但最重要的是,为什么会发生这种情况?

PS: setTimeout 只是问题的简化。事实上,问题是关于任何具有回调函数的自定义组件。

最佳答案

setTimeout 不会触发摘要周期,因此 View 不会更新。 Angular 附带一个内置的 $timeout 模块 - 使用该模块,将执行摘要循环,并且您的 View 将更新。

使用:

app.controller('SampleController', ['$scope', '$timeout', function($scope, $timeout) {
    $timeout(function() { $scope.val2 = "see?" }, 5000);
}]);

关于javascript - AngularJS $scope 不会在回调函数中更新吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42542834/

相关文章:

javascript - 执行函数时页面刷新/崩溃

javascript - 带有谷歌地图的AWS服务器

angularjs - 以 AMD 的身份将 AngularJS 导入 Typescript

javascript - 无法将数据从工厂发送到 angularJs 模式

javascript - 为什么我的康威生命游戏表现得很奇怪?

javascript - 使用 Bootstrap Wizard 将数据发布到给定 URL

javascript - Angular UI Bootstrap Typeahead 不适用于过滤器和 orderBy

javascript - Angular 过滤器: don't use the data of the other array

javascript - AngularJS ng-hide 不工作

javascript - 将长数字格式化为 K 和 2 位有效数字