Angular $ timeout不会更新视图

时间:2015-03-03 17:26:00

标签: angularjs angularjs-scope

在我的控制器中,我有一个方法可以向我的REST API发送POST请求。成功/错误时,我想使用ng-show显示成功/错误消息。问题是我的范围变量已更改,但我的视图未更新。 我尝试过使用$scope.$apply(),但会引发$digest错误。 以下是我目前的代码。有什么想法吗?

 function AdminController($scope, $http, $timeout) {
    $scope.addUserError = false;
    $scope.addUserSuccess = false;

    $scope.createUser = function (newuser) {
        $http.post("rest/user", JSON.stringify(newuser)).success(function () {
            console.log("User added");
            $timeout(function () {
                $scope.addUserSuccess = true;
                $scope.addUserError = false;
            });
        }).error(function () {
            $timeout(function () {
                $scope.addUserSuccess = false;
                $scope.addUserError = true;
                console.log($scope.addUserError); //true
            });
        })
    }
    }

1 个答案:

答案 0 :(得分:2)

将您的代码更新为以下内容:

function AdminController($scope, $http, $timeout) {
    $scope.addUserError = false;
    $scope.addUserSuccess = false;

    $scope.createUser = function (newuser) {
        $http.post("rest/user", JSON.stringify(newuser)).success(function () {
            $scope.addUserSuccess = true;
            $scope.addUserError = false;
        }).error(function () {
            $scope.addUserSuccess = false;
            $scope.addUserError = true;
        });
    };
}

您的观点应如下所示:

<div ng-show="addUserSuccess">User Added!</div>
<div ng-show="addUserError">Error adding user</div>

您不需要在此处使用超时。这只是一个简单的模型更新,angular会自动在$ http调用中为你做这个。