2个不同的控制器:隐藏其中一个控件的动作

时间:2015-02-19 20:12:21

标签: javascript angularjs

我正在尝试这样做:

我有form-group

<div class="form-group">
   <input type="search" ng-model="search"/>
</div>

隐藏另一个form-group时必须隐藏form-group,但是,第一个form-group来自另一个控制器

<div class="form-group" ng-controller="LogoutCtrl" ng-show="displayLogout">
   <button type="button">Account Figures</button>
</div>

所以我要说的是,我需要的是ng-show=displayLogout开始工作后,必须对第一个form-group生效。

问题是,第一个form-group来自名为LinesCtrl的控制器,而第二个来自LogoutCtrl,如上所示,但这两个元素属于同一个{{} 1}}

2 个答案:

答案 0 :(得分:1)

正如评论中所建议的那样,您可以在共同的祖先控制器上发布变量displayLogout

例如:

<div ng-controller="ParentCtrl">
  <div ng-controller="LogoutCtrl" ng-show="displayLogout">
  </div>

  <div ng-controller="SearchCtrl">
    <div class="form-group" ng-show="displayLogout">
      ...
    </div>
  </div>
</div>

ParentCtrl控制器中,设置:

.controller("ParentCtrl", function($scope){
   // ...
   $scope.displayLogout = user.isLoggedIn; // whatever you have there
}

答案 1 :(得分:1)

在父控制器中使用'loggedIn'bool将解决您的问题。如果您需要在应用程序的其他位置使用该bool,则会出现问题。我通常将loggedin bool放在一个处理登录和注销请求的auth服务中。一旦登录或注销事件完成并且已检索到所有应用程序必需数据,此服务就会发送广播。每个控制器/服务/指令都会侦听这些事件并按需要处理它们。

由于身份验证在大多数应用程序中全局使用,因此适合使用Angulars事件。