![](/img/trans.png)
[英]Function in Angular controller not returning data to the $scope variable
[英]Angular function not running in controller or binding to $scope variable
我相信這很簡單,但是我已經嘗試了很多方法,但沒有結果。
我有一家工廠,可以從簡單的端點/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>
我想念什么? 我相信這很簡單。
我想知道什么返回$auth.isAuthenticated();
,是同步還是異步? 如果它是異步的,則表達式isAuthenticated()
可能返回錯誤的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.