Javascript 2个不同的控制器:隐藏其中一个控制器动作上的元素
我正在尝试这样做: 我有这个Javascript 2个不同的控制器:隐藏其中一个控制器动作上的元素,javascript,angularjs,Javascript,Angularjs,我正在尝试这样做: 我有这个表单组: <div class="form-group"> <input type="search" ng-model="search"/> </div> 假设我所需要的是,一旦ng show=displayLogout开始工作,就必须对第一个表单组也起作用 第一个表单组来自名为LinesCtrl的控制器,第二个来自LogoutCtrl,如上所示,但这两个元素位于相同的navbar中,正如注释中所建议的那样,您可以在公共祖先
表单组
:
<div class="form-group">
<input type="search" ng-model="search"/>
</div>
假设我所需要的是,一旦ng show=displayLogout
开始工作,就必须对第一个表单组
也起作用
第一个
表单组
来自名为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>
在父控制器中使用“loggedIn”bool将解决您的问题。如果您需要在应用程序的其他地方使用该bool,则会出现问题。我通常将loggedinbool放在处理登录和注销请求的auth服务中。一旦登录或注销事件完全完成并检索到所有应用程序必需的数据,此服务将发送广播。每个控制器/服务/指令侦听这些事件,并根据需要处理它们
由于身份验证在大多数应用程序中都是全局使用的,因此它很适合使用Angulars事件。您是否试图在登录/注销时更改项目?如果需要将控制器分开,请使用公共父控制器范围内的变量作为隐藏/显示元素的标志。@BenFelda yes,我只需要在用户登录时显示这些元素。
<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>
.controller("ParentCtrl", function($scope){
// ...
$scope.displayLogout = user.isLoggedIn; // whatever you have there
}