我确信这很简单,但是我尝试了很多方法而没有结果。
我有一个工厂,可以从简单的端点/api/me
检索配置文件数据。它应该返回名称,电子邮件等....它适用于我的个人资料页面。但是,我的导航栏似乎是另一回事。
navBarCtrl
中的某些函数似乎会启动,但它只返回一个布尔值。我真正想要的功能似乎是惰性的。可能是因为它正在等待某种事件。
当auth服务检查用户是否经过身份验证时,我尝试使用广播,但这似乎也没有。
首先,Node API端点。可能没有必要,但以防万一。
app.get('/api/me', ensureAuthenticated, function(req, res) {
User.findById(req.user, function(err, user) {
res.send(user);
});
});
帐户工厂。
angular
.module('issuefy')
.factory('Account', Account);
Account.$inject = ['$http', 'LocalStorage'];
function Account($http, LocalStorage) {
return {
getUser: function() {
return $http.get('/api/me');
},
updateProfile: function(profileData) {
return $http.put('/api/me', profileData);
}
};
现在是控制器。请注意,我尝试以两种不同的方式做到这一点。
angular
.module('issuefy')
.controller('NavbarCtrl', NavbarCtrl);
NavbarCtrl.$inject = ['$scope', '$http', '$location', 'LocalStorage', 'QueryService', '$auth', 'toastr', 'Account'];
function NavbarCtrl($scope, $http, $location, LocalStorage, QueryService, $auth, toastr, Account) {
$scope.getNavUser = function() {
Account.getUser()
.then(function(response) {
$scope.userNav = response.data;
})
.catch(function(response) {
toastr.error(response.data.message, response.status);
});
};
$scope.$on('user-authenticated', function(event, args) {
Account.getUser()
.then(function(response) {
$scope.userNav1 = response.data;
})
.catch(function(response) {
toastr.error(response.data.message, response.status);
});
});
$scope.isAuthenticated = function() {
return $auth.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> Issuefy</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>
{{user.name}}
</ul>
<ul ng-if="isAuthenticated()" class="nav navbar-nav pull-right">
<li><a href="/#/logout">Logout</a></li>
<li><a href="/#/logout"><span ng-bind="userNav.email"></span></a></li>
<li><a href="/#/logout"><span ng-bind="userNav1.email"></span></a></li>
<li>{{userNav1.email}}</li>
<li>
<div class="btn-group" uib-dropdown is-open="status.isopen">
<button id="single-button" type="button" class="btn btn-primary" uib-dropdown-toggle ng-disabled="disabled">
<i class="fa fa-user">a {{userNav.email}} email</i></span>
</button>
<ul class="uib-dropdown-menu" role="menu" aria-labelledby="single-button">
<li role="menuitem"><a href="#">Action</a></li>
<li role="menuitem"><a href="#">Another action</a></li>
<li role="menuitem"><a href="#">Something else here</a></li>
<li class="divider"></li>
<li role="menuitem"><a href="#">Separated link</a></li>
</ul>
</div>
</li>
</ul>
</div>
<div ui-view></div>
我错过了什么?我确信这很简单。
答案 0 :(得分:0)
我想知道什么返回$auth.isAuthenticated();
,是同步还是异步?如果它是异步的,则表达式isAuthenticated()
可能返回错误的值。