У меня есть заголовок в виде
<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;
, ожидая, что меню навигации будет скрыто, но доцент.
Кажется, что-то сделано не так :(
Измените $ scope на $ rootScope в обоих контроллерах, чем он будет работать. $ rootScope - самая верхняя область.
Только для записи: это не мое предпочтительное решение, я бы пошел с сервисом.
Области привязаны к элементам DOM и, возможно, друг к другу. Они не являются одноточечными и не связаны с модулями (они служат как слой модели, а не как сервисный уровень).
Поскольку области видимости могут образовывать иерархию, основанную на дереве DOM, вы можете сохранить общие данные в самой верхней области; таким образом, он был бы доступен из любого охвата потомства.
$scope.isAuthenticated
имеет значение false;
что должно обновить ng-show="isAuthenticated"
правильно, так как области ng-show="isAuthenticated"
друг с другом?
$scope
. Как вы ожидаете, что изменение свойства одного из них повлияет на два других?