$ scope变量不在控制器之间更新 - angularjs

时间:2015-12-02 15:28:53

标签: angularjs angularjs-scope

我有一个标题视图

<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);
}());

当我点击Logout链接时,我设置$scope.isAuthenticated = false;,期望导航菜单隐藏但是它很有用。

似乎有些事情以错误的方式完成:(

Link to Plunk

2 个答案:

答案 0 :(得分:1)

范围粘贴到DOM元素,并且可能彼此粘合。它们不是单例,它们没有连接到模块(它们用作模型层,而不是服务层)。

由于范围可以构成层次结构,因此可以将公共数据保留在最顶层的范围内;通过这种方式,可以从任何后代范围访问它。

答案 1 :(得分:1)

将两个控制器中的$ scope更改为$ rootScope。 $ rootScope是最重要的范围。

仅供记录:这不是我首选的解决方案,我会选择服务。