1

Я пытаюсь показать и скрыть div, используя ng-show. Это навигационная панель, которую я хочу показать только в некоторых представлениях.Изменить значение ng-show в другом контроллере

У меня есть контроллер, который «контролирует» этот div. И в другом контроллере я хочу отредактировать это значение ng-show, чтобы скрыть или показать div (navbar).

Я пробовал разные вещи, используя $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> 

Я попробовал (нг-шоу = "isLogged == ложь") слишком.

Контроллер 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; 
    }); 

Спасибо за помощь!

+0

где у инициализации переменной isLogged,? –

+0

Я полагаю, что $ scope не передается через разные контроллеры? Итак, вам нужно инициализировать переменную isLogged в контроллере appCtrl? – Olly

+0

Я пробовал $ scope.isLogged = false в appCtrl раньше, это то, что вы подразумеваете под инициализацией? –

ответ

0

Ну, наконец-то я нашел решение. Я ставлю это, если кто-то может помочь:

Я положил .run в 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; 
    }]); 
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 в любом из контроллеров изменит значение в обоих.

+0

, но я хочу изменить значение isLogged в зависимости от вида, где я есть –

0

В контроллере appCtrl выполните $ scope.isLogged = 0. Если вы измените это значение на 1, блок будет виден, иначе он будет скрыт.

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

Ниже приведена plunker:

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

+0

I ' ve поместил это в appCtrl и $ scope.isLogged = 1 в userCtrl, но это та же проблема, что и ложь и истина. Это как значение isLogged всегда было false, не обновляет новое значение. –

+0

Как вы хотите обновить значение? –

+0

в userCtrl Я хочу поместить истинное значение в isLogged, чтобы показать div ng-show –

Смежные вопросы