2013-03-20 3 views
1

Как установить некоторую модель/переменную перед каждым вызовом контроллера?Очистить переменную перед каждым вызовом контроллера в AngularJS?

В настоящее время у меня есть следующие услуги, чтобы помочь мне установить сообщения об ошибках на странице (код в LiveScript):

angular.module "project.services", 
.factory "Message", ($rootScope) -> 
    { 
    error : !(msg) -> $rootScope.error = msg 
    success : !(msg) -> $rootScope.success = msg 
    clear : !(msg) -> 
        $rootScope.error = '' 
        $rootScope.success = '' 
    } 

, а затем в моем index.html шаблона:

<div ng-show="error" class="alert alert-error">{{error}}</div> 
<div ng-show="success" class="alert alert-success">{{success}}</div> 
<div ng-view>   

Но для того, чтобы используйте его, я должен вызвать метод clear в каждый контроллер, в противном случае ошибка остается на экране:

@SomeController = !($scope, $http, Message) -> 
    Message.clear() # <--- have to do this 

    ... rest of the controller code 
    if some-error condition 
     Message.error("Could not do this") 
    else 
     Message.success("Success!") 

Есть ли способ автоматизировать этот ясный шаг?

ответ

1

Если вы хотите, чтобы удалить сообщение после каждого изменения маршрута, который, кажется, чтобы соответствовать вашему случаю использования, вы можете изменить свой сервис на что-то вроде этого:

angular.module "project.services" .factory "Message", ($rootScope) -> 
    # The Message factory API. 
    MessageApi = { 
    error : !(msg) -> $rootScope.error = msg 
    success : !(msg) -> $rootScope.success = msg 
    clear : !(msg) -> 
       $rootScope.error = '' 
       $rootScope.success = '' 
    } 

    # Call Message.clear whenever the route changes. 
    $rootScope.$on '$routeChangeSuccess', -> MessageApi.clear! 

    # Return the API. 
    MessageApi 
Смежные вопросы