我正在尝试创建一个只向具有正确角色的用户显示html的某个部分的函数。这些是我的功能:
的NodeJS / server.js
app.get('/api/isadmin', ensureAuthenticated, function (req, res) {
User.findById(req.user, function (err, user) {
res.send(user);
});
});
这是问题发生的地方,它将无限期地运行:
<ul ng-if="isAdmin()">
<li>
<a ui-sref="admin">Admin</a>
</li>
</ul>
为什么会这样?我看过Satellizer的isAuthenticated功能,基本上做了同样的事情。
编辑: 更新的代码:
adminservice.js
angular.module('App')
.factory('AdminService', function ($q, $http, toastr) {
return {
getAdmin: function () {
var httpget = $http.get('http://localhost:3000/api/isadmin');
httpget.then(function (response) {
var res = response.data.role;
if (res == 'admin') {
console.log('true');
return true;
}
else {
console.log('false');
return false;
}
}, function (result) {
return $q.reject(result);
});
return httpget;
}
};
});
navbar.js
angular.module('App')
.controller('NavbarCtrl', function($q, $scope, $auth, AdminService) {
$scope.isAuthenticated = function() {
return $auth.isAuthenticated();
};
AdminService.getAdmin().then(
function (result) {
$scope.isAdmin = result;
});
});
这两个回复(无论是真还是假)仍然可以看到管理员列表元素。
答案 0 :(得分:1)
我准备写很多东西。由于您已经找到并更新了代码,因此我要解决现有问题。您需要return
来自getAdmin
函数的承诺实例,而不是httpget
。
angular.module('App')
.factory('AdminService', function ($q, $http, toastr) {
return {
getAdmin: function () {
var httpget = $http.get('http://localhost:3000/api/isadmin');
return httpget.then(function (response) {
var res = response.data.role;
if (res == 'admin') {
console.log('true');
return true;
}
else {
console.log('false');
return false;
}
}, function (result) {
// just return false
return false;
});
}
};
});
你的控制器看起来很好。在html部分中,将ng-if与isAdmin
属性绑定。
<ul ng-if="isAdmin">
<li>
<a ui-sref="admin">Admin</a>
</li>
</ul>
希望,这有帮助。
<强>更新强>
只返回httpget
将返回promise实例,但您将在resolve函数中获得实际响应。您调用http://localhost:3000/api/isadmin
的响应。请参阅此插件:http://plnkr.co/edit/9UtYJlm9BalTi8HHTrV2?p=preview