8

典型的な状況について通知する小さな通知機能を作成しようとしています:承認が必要、変更が保存されたなど。通知は3秒間表示され、ユーザーがクリックしなかった場合は消えます(通知をクリックするとすぐに消えます)。ドキュメントはあまり有益ではありません。3 秒後$timeoutに呼び出すには、 をどのように使用すればよいですか? そして、どうすれば変数を関数close();に入れることができますか? default(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);
                }
            });
        }
    }
});
4

2 に答える 2

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; 
});
于 2013-09-09T06:41:56.967 に答える
-2

やり方はこちら

$timeout(function () {

    // do something

}, 50);
于 2015-02-18T13:36:03.313 に答える