Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 2个不同的控制器:隐藏其中一个控制器动作上的元素_Javascript_Angularjs - Fatal编程技术网

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
}