我正在尝试这样做:
我有这个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事件的一个很好的候选者。