这是一个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初始化之前延迟显示视图?
答案 0 :(得分:0)
在控制器中调用一次isAuthenticated()函数。
将返回值存储在某个$ scope变量中。
在视图中使用此变量。 这只会在控制器加载时为您设置方法。