在setTimeout中修改ng-show

时间:2014-02-19 07:36:59

标签: javascript angularjs

我有一个像这样的控制器: -

appControllers.controller("TaskAddController", function ($scope, $http) {
    $scope.task = {};
    $scope.messages = {};

    $scope.actions = {
        save : function() {
            $http.post("/ajax/tasks/save", $scope.task)
            .then(function() {
                $scope.messages.success = true;
                $scope.task = {};

                setTimeout(function () {
                    $scope.messages.success = false;
                }, 3000);
            });
        }
    };
});

视图如下: -

<div data-ng-controller="TaskAddController">
    <div data-ng-show="messages.success">Task Added</div>
    <div>
        <input data-ng-model="task.title" type="text" placeholder="Title...."/>
    </div>
    <div>
        <textarea data-ng-model="task.description" placeholder="Description..."></textarea>
    </div>
    <div>
        <input data-ng-click="actions.save()" type="submit" value="add"/>
    </div>
</div>

我要做的是在完成AJAX请求时我要显示包含任务添加的div,然后在3秒后它消失了第一部分正在工作,例如当AJAX请求完成时会出现div,但即使我的setTimeout肯定发生了,div也没有消失。

现在从我的研究中我认为这是因为我需要获得Angular摘要。所以我尝试了以下方法: -

setTimeout(function () {
    $scope.messages.success = false;
    $scope.apply();
}, 3000);

但这似乎没有什么区别。我错过了什么?

1 个答案:

答案 0 :(得分:7)

您应该使用$timeout

$timeout(function () {
    $scope.messages.success = false;
}, 3000);

注意:您需要在控制器中注入$timeout