angularjs:$ timeout使用率(服务内部)

时间:2013-09-09 06:37:42

标签: angularjs service timeout closures

我正在尝试制作一个通知,告知典型情况:需要授权,保存更改等。通知显示3秒钟后消失,如果用户没有点击它(如果点击通知,它会消失立刻)。 文档资料不多。 我应该如何使用$timeout,在3秒后拨打close();? 我如何将变量 (nId) 置于函数中?我尝试使用默认(*function(){return function(){}}*)中的闭包setTimeOut(),但未成功。

myApp.controller('noticesCtrl',
    function noticesCtrl($scope, $rootScope, noticesData){
        $rootScope.notices = [];
        $scope.closeNotice = function(nId){
            noticesData.close(nId);
        };
    });

myApp.factory('noticesData', function($rootScope, $timeout){
    return{
        add: function(type, text){
            var nId = $rootScope.notices.length + 1;
            $rootScope.notices.push({id: nId, type:type, text:text+nId});
            // call close function with 3sec. delay; how?
        },
        close: function(nId){
            angular.forEach($rootScope.notices, function(notice, key){
                if(notice.id == nId){
                    $rootScope.notices.splice(key,1);
                }
            });
        }
    }
});

2 个答案:

答案 0 :(得分:4)

myApp.factory('noticesData', function($rootScope, $timeout){
    var obj = {};
    obj.add = function(type, text){
        var nId = $rootScope.notices.length + 1;
        $rootScope.notices.push({id: nId, type:type, text:text+nId});
        $timeout(function(){
            obj.close(nId);
        },3000);
    }
    obj.close = function(nId){
        angular.forEach($rootScope.notices, function(notice, key){
            if(notice.id == nId){
                $rootScope.notices.splice(key,1);
            }
        });
    }
    return obj; 
});

答案 1 :(得分:-2)

Heres怎么做

$timeout(function () {

    // do something

}, 50);