如何在初始化方法后将$ rootScope方法/参数注入视图?

时间:2014-09-13 16:44:11

标签: angularjs angularjs-scope

这是一个angular.js控制器和视图,控制器有一个isAuthenticated()方法来检查用户是否经过身份验证。这些方法运行良好,但加载了视图,方法执行三次,因为该方法被注入视图三次。

<div ng-controller="NavbarCtrl" class="navbar navbar-default navbar-static-top">
  <div class="navbar-header">
    <a class="navbar-brand" href="#/"><i class="ion-ios7-pulse-strong"></i> KongFuBaoHe</a>
  </div>
  <ul class="nav navbar-nav">
    <li><a href="#/">Home</a></li>
    <li ng-if="isAuthenticated()"><a href="#/profile">Profile</a></li>
  </ul>
  <ul ng-if="!isAuthenticated()" class="nav navbar-nav pull-right">
    <li><a href="#/login">Login</a></li>
    <li><a href="#/signup">Sign up</a></li>
  </ul>
  <ul ng-if="isAuthenticated()" class="nav navbar-nav pull-right">
    <li><a href="#/logout">Logout</a></li>
  </ul>
</div>


angular.module('MyApp')
  .controller('NavbarCtrl', function($rootScope,$scope, $auth, $window) {
    $scope.isAuthenticated = function() {
           ....
    };
})

所以我想做的就是运行方法 - 只检查一次身份验证。因此我将这些方法放入$ rootScepe。

最后我尝试了另一种方法,而不是使用$ rootScope函数,而是使用$ rootScope参数注入视图

angular.module('MyApp')
.run(['$rootScope',   function ($rootScope) { 
    $rootScope.isAuth = false;
    $rootScope.isAuthenticated = function() {
       if(..) $rootScope.isAuth = true;
       else $rootScope.isAuth = false;
    }
    $rootScope.isAuthenticated();
]})

<div ng-controller="NavbarCtrl" class="navbar navbar-default navbar-static-top">
  <div class="navbar-header">
    <a class="navbar-brand" href="#/"><i class="ion-ios7-pulse-strong"></i> KongFuBaoHe</a>
  </div>
  <ul class="nav navbar-nav">
    <li><a href="#/">Home</a></li>
    <li ng-if="isAuth"><a href="#/profile">Profile</a></li>
  </ul>
  <ul ng-if="!isAuth" class="nav navbar-nav pull-right">
    <li><a href="#/login">Login</a></li>
    <li><a href="#/signup">Sign up</a></li>
  </ul>
  <ul ng-if="isAuth" class="nav navbar-nav pull-right">
    <li><a href="#/logout">Logout</a></li>
  </ul>
</div>

在这个解决方案中,我有$ rootScope.isAuth参数,我将它注入到视图中,但是当它启动时,甚至$ rootScope.isAuth都是false,但是视图做的相反,显示部分$ rootScope.isAuth为true,如何在$ rootScope.isAuth初始化之前延迟显示视图?

1 个答案:

答案 0 :(得分:0)

在控制器中调用一次isAuthenticated()函数。

将返回值存储在某个$ scope变量中。

在视图中使用此变量。 这只会在控制器加载时为您设置方法。