javascript - 在 setTimeout 中修改 ng-show

标签 javascript angularjs

我有一个这样的 Controller :-

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);
            });
        }
    };
});

View 看起来像这样:-

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

但这似乎并没有什么不同。我错过了什么?

最佳答案

你应该使用$timeout

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

注意:您需要在 Controller 中注入(inject)$timeout

关于javascript - 在 setTimeout 中修改 ng-show,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21873985/

相关文章:

php - Ubuntu 中的 Javascript 错误未捕获 ReferenceError : $ is not defined

javascript - 从桌面 Chrome IndexedDB 删除记录与从 Android Chrome IndexedDB 删除记录

angularjs - ionic 事件不会触发内部指令

css - Angular Material Flex : positioning a FAB dial relative to a responsive image

javascript - Highcharts 显示时间戳为错误日期

javascript - 即使不满足 while 循环的条件,仍会调用递归函数

javascript - 在维基媒体/维基百科中搜索文件

javascript - HTML 选择元素不会在 THREE.js 场景顶部下拉

javascript - 使用 $q.all 进行同步 http 调用不工作 angularjs

javascript - 在指令定义中使用 $compile 有什么意义?