从index.html调用函数,函数无限循环

我试图做一个function,只显示了一个具有正确angular色的用户的一部分的HTML。 这些是我的function:

的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> 

为什么发生这种情况? 我已经看过了卫星的isAuthenticatedfunction,基本上做了同样的事情。

编辑:更新的代码:

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

这两个响应,无论是true还是false,仍然可以看到Admin列表元素。

我正要写很多东西。 既然你找出并更新了你的代码,那么让我来解决一下现有的问题。 您需要从getAdmin函数return promise实例,而不是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的响应。 看到这个plunk: http ://plnkr.co/edit/9UtYJlm9BalTi8HHTrV2? p= preview