javascript - 在 AngularJS 中每次调用 Controller 之前清除变量?

标签 javascript angularjs livescript

如何在每次 Controller 调用之前设置一些模型/变量?

目前我有以下服务来帮助我在页面上设置错误消息(代码在 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>        

但是为了使用它,我必须在每个 Controller 中调用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!")

有什么方法可以自动完成这个明确的步骤吗?

最佳答案

如果您想在每次路由更改后清除消息(这似乎适合您的用例),您可以将您的服务更改为如下所示:

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

关于javascript - 在 AngularJS 中每次调用 Controller 之前清除变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15528764/

相关文章:

javascript - 如何将我的backbonejs View 与jquery结合起来

c# - 在 javascript 函数中传递参数

javascript - AngularJS - 自动生成用于访问 REST API 的工厂的建议

javascript - jQuery 事件停止与 RxJS 一起工作

javascript - Livescript:无法定义 AudioContext

JavaScript 将元素键赋予数组

javascript - 如何在从 json 数据创建 html 表时创建隐藏的 <td> 行?

javascript - AngularJS:模型不在 Controller 范围内更新

angularjs - 为什么必须将 SharedModule 导入 Root Module?

javascript - 从 LiveScript 模块导出函数的最佳方式是什么?