在其他控制器中更改 ng-show 值
Change ng-show value in other controller
我正在尝试使用 ng-show
显示和隐藏 div。这是一个我只想在某些视图中显示的导航栏。
我有一个 "controls" div 的控制器。在其他控制器中,我想编辑此 ng-show
值以隐藏或显示 div(导航栏)。
我尝试了不同的方法,如使用 $rootScope
、超时、$apply
、工厂...但没有任何效果。
所以我在这里问是否有人可以帮助我。
(对不起我的英语)
这是我的html和js代码(最后编辑的代码)
<div id="main">
<!-- Aquí inyectamos las vistas -->
<div ng-controller="appCtrl" ng-show="isLogged" class="navbar navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button>
<a class="navbar-brand" href="#/">Aula Virtual</a> </div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav" style="text-align: right">
<li class="active"><a href="#/home">Home</a></li>
<li><a href="#/server">Users</a></li>
<li><a href="#/operaciones">Operaciones</a></li>
<li><a href="#/about">About</a></li>
<li><a href="#/contact">Contact</a></li>
</ul>
</div>
</div>
<div class="connect">
<div class="container">
<p>
Aula Virtual para profesorado y alumnos de la universidad
</p>
</div>
</div>
</div>
<div ui-view></div>
</div>
我也尝试了 (ng-show="isLogged==false")。
div的控制器:
.controller('appCtrl', function($scope, $rootScope) {
console.log($scope.isLogged); //---> this shows undefined
});
我要编辑 isLogged 值的控制器:
cities2.controller('userCtrl',['rootScope', '$scope', '$state','$http','md5', function($rootScope, $scope, $state, $http, md5) {
$rootScope.$apply(function(){
$rootScope.isLogged = true;
});
感谢您的帮助!
使用服务在控制器之间共享数据是一种很好的做法。
cities2.controller('appCtrl', ['$scope', 'LoggedStatus', function($scope,LoggedStatus) {
$scope.LoggedStatus = LoggedStatus;
}]);
cities2.controller('userCtrl', ['$scope', 'LoggedStatus', function($scope,LoggedStatus) {
$scope.LoggedStatus = LoggedStatus;
}]);
cities2.service('LoggedStatus', function() {
return {
isLogged: false
}
});
在任一控制器中更改 $scope.LoggedStatus.isLogged 的值将更改两个控制器中的值。
在您的 appCtrl 控制器中,执行 $scope.isLogged=0。如果将此值更改为 1,则该块将可见,否则将被隐藏。
app.controller('appCtrl', function($scope) {
$scope.isLogged=0;
})
参考下面的plunker:
好吧,我终于找到了解决办法。如果可以帮助某人,我把它放在:
我在初始化 ng-show 的 appCtrl 中放了一个 .运行:
.run(function ($rootScope) {
$rootScope.isLogged = false;
});
现在,当我在另一个控制器中输入真值时,它会工作,并且会出现导航栏。
cities2.controller('userCtrl',['$rootScope', '$scope', '$state','$http','md5','$sessionStorage', function($rootScope, $scope, $state, $http, md5, $sessionStorage) {
$rootScope.isLogged=true;
}]);
我正在尝试使用 ng-show
显示和隐藏 div。这是一个我只想在某些视图中显示的导航栏。
我有一个 "controls" div 的控制器。在其他控制器中,我想编辑此 ng-show
值以隐藏或显示 div(导航栏)。
我尝试了不同的方法,如使用 $rootScope
、超时、$apply
、工厂...但没有任何效果。
所以我在这里问是否有人可以帮助我。
(对不起我的英语)
这是我的html和js代码(最后编辑的代码)
<div id="main">
<!-- Aquí inyectamos las vistas -->
<div ng-controller="appCtrl" ng-show="isLogged" class="navbar navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button>
<a class="navbar-brand" href="#/">Aula Virtual</a> </div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav" style="text-align: right">
<li class="active"><a href="#/home">Home</a></li>
<li><a href="#/server">Users</a></li>
<li><a href="#/operaciones">Operaciones</a></li>
<li><a href="#/about">About</a></li>
<li><a href="#/contact">Contact</a></li>
</ul>
</div>
</div>
<div class="connect">
<div class="container">
<p>
Aula Virtual para profesorado y alumnos de la universidad
</p>
</div>
</div>
</div>
<div ui-view></div>
</div>
我也尝试了 (ng-show="isLogged==false")。
div的控制器:
.controller('appCtrl', function($scope, $rootScope) {
console.log($scope.isLogged); //---> this shows undefined
});
我要编辑 isLogged 值的控制器:
cities2.controller('userCtrl',['rootScope', '$scope', '$state','$http','md5', function($rootScope, $scope, $state, $http, md5) {
$rootScope.$apply(function(){
$rootScope.isLogged = true;
});
感谢您的帮助!
使用服务在控制器之间共享数据是一种很好的做法。
cities2.controller('appCtrl', ['$scope', 'LoggedStatus', function($scope,LoggedStatus) {
$scope.LoggedStatus = LoggedStatus;
}]);
cities2.controller('userCtrl', ['$scope', 'LoggedStatus', function($scope,LoggedStatus) {
$scope.LoggedStatus = LoggedStatus;
}]);
cities2.service('LoggedStatus', function() {
return {
isLogged: false
}
});
在任一控制器中更改 $scope.LoggedStatus.isLogged 的值将更改两个控制器中的值。
在您的 appCtrl 控制器中,执行 $scope.isLogged=0。如果将此值更改为 1,则该块将可见,否则将被隐藏。
app.controller('appCtrl', function($scope) {
$scope.isLogged=0;
})
参考下面的plunker:
好吧,我终于找到了解决办法。如果可以帮助某人,我把它放在:
我在初始化 ng-show 的 appCtrl 中放了一个 .运行:
.run(function ($rootScope) {
$rootScope.isLogged = false;
});
现在,当我在另一个控制器中输入真值时,它会工作,并且会出现导航栏。
cities2.controller('userCtrl',['$rootScope', '$scope', '$state','$http','md5','$sessionStorage', function($rootScope, $scope, $state, $http, md5, $sessionStorage) {
$rootScope.isLogged=true;
}]);