2个不同的控制器:在其中一个控制器的动作上隐藏元素

2 different controllers: hiding elements on the action of one of them

本文关键字:控制器 一个 元素 隐藏 在其中 2个      更新时间:2024-02-19

我正在尝试这样做:

我有这个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,如上所述,但这两个元素在同一个navbar

正如注释中所建议的,您可以在公共祖先控制器上发布变量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
}

在父控制器中设置"loggedIn"布尔将解决您的问题。如果你需要在应用程序的其他地方使用bool,就会出现问题。我通常将loggedin-bool放在处理登录和注销请求的身份验证服务中。一旦登录或注销事件完全完成,并且检索到所有应用程序必需的数据,此服务就会发送广播。每个控制器/服务/指令都会侦听这些事件,并根据需要进行处理

由于大多数应用程序都在全球范围内使用身份验证,因此它是使用Angulars事件的一个很好的候选者。