переменная $ scope не обновляется между контроллерами - angularjs

0

У меня есть заголовок в виде

<div ng-controller="navCtrl">
<ul class="nav navbar-nav" ng-show="isAuthenticated">
      <li> <a ui-sref="logout"> Logout </a> </li>
</ul>
</div>

Контроллер навигации

(function(){
    var navigationController = function($scope, authToken){
        $scope.isAuthenticated = authToken.isAuthenticated(); //return bool
    };
    navigationController.$inject = ['$scope','authToken'];
    angular.module('simpleApp')
        .controller('navCtrl', navigationController);
}());

У меня есть другой контроллер выхода

(function(){
    var logoutController = function($scope ,authToken, $state){
        $scope.isAuthenticated = false;
        $state.go('main');
    };
    logoutController.$inject = ['$scope', 'authToken', '$state'];
    angular.module('simpleApp')
        .controller('logoutCtrl', logoutController);
}());

Когда я нажимаю на ссылку "Выход", я устанавливаю $scope.isAuthenticated = false; , ожидая, что меню навигации будет скрыто, но доцент.

Кажется, что-то сделано не так :(

Ссылка на Plunk

  • 0
    На вашей странице есть 3 разных угловых модуля, каждый со своей $scope . Как вы ожидаете, что изменение свойства одного из них повлияет на два других?
  • 0
    одно имя для модуля через контроллеры не поможет?
Показать ещё 6 комментариев
Теги:
angularjs-scope

2 ответа

1

Измените $ scope на $ rootScope в обоих контроллерах, чем он будет работать. $ rootScope - самая верхняя область.

Только для записи: это не мое предпочтительное решение, я бы пошел с сервисом.

  • 0
    plnkr.co/edit/uz9Dyz , вы можете проверить, что обновленный plunk pls. создал фабрику, как я могу заставить контроллеры общаться друг с другом?
  • 0
    как я могу обновить интерфейс?
1

Области привязаны к элементам DOM и, возможно, друг к другу. Они не являются одноточечными и не связаны с модулями (они служат как слой модели, а не как сервисный уровень).

Поскольку области видимости могут образовывать иерархию, основанную на дереве DOM, вы можете сохранить общие данные в самой верхней области; таким образом, он был бы доступен из любого охвата потомства.

  • 0
    извините, я все еще запутался в контроллере выхода из системы. $scope.isAuthenticated имеет значение false; что должно обновить ng-show="isAuthenticated" правильно, так как области ng-show="isAuthenticated" друг с другом?
  • 0
    Области применения склеены друг с другом, когда они вложены. Тогда внутренние области видят атрибуты из своих внешних областей. Вы пытаетесь увидеть атрибут из внутренней области (логин) во внешней области (навигация), который не будет работать. Как указано в моем ответе, держите данные в своей верхней области. Или в этом случае реальное решение - добавить объект службы входа в систему.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню