更改其他控制器中的ng-show值

时间:2016-04-20 09:52:31

标签: javascript angularjs angularjs-scope ng-show angularjs-ng-show

我正在尝试使用ng-show显示和隐藏div。这是一个我只想在某些视图中显示的导航栏。

我有一个“控制”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;
    });

感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

最好使用服务在控制器之间共享数据。

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的值将更改两者中的值。

答案 1 :(得分:0)

在appCtrl控制器中,执行$ scope.isLogged = 0。如果将此值更改为1,则该块将可见,否则将被隐藏。

app.controller('appCtrl', function($scope) {
  $scope.isLogged=0;
})

请参阅下面的插件:

https://plnkr.co/edit/d3q3QwA9k5f6ewXbqZ3M?p=preview

答案 2 :(得分:0)

好吧,最后我找到了解决方案。如果可以帮助某人,我会说这个:

我在appCtrl中放了一个.run,我初始化了ng-show:

.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;
  }]);