2013-09-09 4 views
8

Я пытаюсь сделать небольшое уведомление, информирующее о типичных ситуациях: требуется авторизация, изменения сохранены и т. Д. Заметки отображаются в течение 3 секунд и исчезают, если пользователь не нажмите на него (если уведомление нажата, оно немедленно исчезнет). Документация не очень информативна. Как использовать $timeout, чтобы позвонить по телефону close(); через 3 секунды? И как я могу поместить переменную (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); 
       } 
      }); 
     } 
    } 
}); 
+0

Вы уже проверили [Toastr] (https://github.com/CodeSeven/toastr) библиотеки JS? Он имеет несколько вариантов, и он показывает довольно приятные уведомления. Я просто завернул это в службу, чтобы использовать его в AngularJS. (И нет, я не связан с командой :)) – superjos

ответ

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

Я не думаю, что получаю то, что вы пытаетесь сказать, но объект должен быть создан, прежде чем вы сможете использовать любой из его содержащихся методов. – AlwaysALearner

+0

Я только говорю, что вызов this.close() работает хорошо, и я подумал, что существует способ вызвать this.close() с задержкой в ​​$ timeout (она не работает, но также не сообщает об ошибке) , В любом случае, большое спасибо. – philosophocat

-2

Вот как это сделать

$timeout(function() { 

    // do something 

}, 50);