gpt4 book ai didi

javascript - Angular : displaying elements in navbar after logged in

转载 作者:行者123 更新时间:2023-11-29 15:34:39 25 4
gpt4 key购买 nike

我是 AngularJS 的新手,我在尝试在我的导航栏和“注销”按钮中显示 userInfo 时遇到了问题,但只有在我登录后才会出现。

1)

我使用 ng-show 仅在登录时显示“注销”按钮,但此按钮在所有情况下都会出现。

2)

我无法绑定(bind)来 self 创建的身份验证服务的 userInfo。

导航栏指令:

'use strict';

angular.module('clientApp')
.directive('navbar', function() {
return {
restrict: 'E',
templateUrl: 'views/shared/navbar.html',
controller: 'NavigationCtrl'
};
});

导航 Controller :

'use strict';

angular.module('clientApp')
.controller('NavigationCtrl', function ($scope, $location, authentication) {
$scope.isActive = function(path) {
return path === $location.path();
};

$scope.isLoggedIn = function() {
return authentication.isLoggedIn;
};

$scope.userInfo = function() {
return authentication.getUserInfo.firstname;
};
});

身份验证服务:

'use strict';

angular.module('clientApp').factory('authentication', function($http, $q,
$window, $location, ENV) {
var userInfo;

function init() {
if ($window.sessionStorage.userInfo) {
userInfo = JSON.parse($window.sessionStorage.userInfo);
}
}
init();

function getUserInfo() {
return userInfo;
}

function isLoggedIn() {
return ($window.sessionStorage.userInfo) ? true : false;
}

isLoggedIn();

function login(user) {
var deferred = $q.defer();

$http.post(ENV.apiEndpoint + 'recruiters/auth', {
email: user.email,
password: user.password
}).then(function(result) {
userInfo = {
appToken: result.data['app_token'],
firstname: result.data['first_name']
};
$window.sessionStorage.userInfo = JSON.stringify(userInfo);
deferred.resolve(userInfo);
$location.path('/');
$http.defaults.headers.common['Authorization'] = 'Oauth ' +
userInfo.appToken;
}, function(error) {
deferred.reject(error);
});

return deferred.promise;
}

return {
login: login,
getUserInfo: getUserInfo
};


});

Navabar.html:

<div class="header">
<div class="navbar navbar-default" role="navigation">
<div class="container">
<div class="navbar-header">

<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#js-navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>

<a class="navbar-brand" href="#/">KDZ</a>
</div>

<div class="collapse navbar-collapse" id="js-navbar-collapse">

<ul class="nav navbar-nav">
<li ng-class="{active:isActive('/')}"><a href="#/">Home</a></li>
<li ng-class="{active:isActive('/postings')}"><a ng-href="#/postings">Postings</a></li>
<li ng-class="{active:isActive('/signup')}"><a ng-href="#/signup">Sign Up</a></li>
<li ng-show="isLoggedIn">Logged as {{userInfo}}</a></li>
<li ng-show="isLoggedIn"><a ng-href="#/logout"></a>Logout</li>
</ul>
</div>
</div>

我认为 View 和 Controller 或服务之间的绑定(bind)是错误的,但我不知道如何正确地进行绑定(bind)。有人有想法吗?谢谢!

最佳答案

1) 您的 isLoggedIn 是一个函数,并且函数的计算结果为真,因此显示了 li。像 ng-show="isLoggedIn()" 那样使用它。 return authentication.isLoggedIn; 部分中的 Controller 函数也是如此

2) 你的 getUserInfo 也是一个函数,所以像这样使用它:

$scope.userInfo = function() {
var userInfo = authentication.getUserInfo(); // see the () here
if (userInfo && userInfo.firstname)
return userInfo.firstname;

return 'unknown person';
};

最后但同样重要的是,您的“身份验证”服务甚至没有“isLoggedIn”功能。将服务的返回值更改为此:

return {
login: login,
getUserInfo: getUserInfo,
isLoggedIn: isLoggedIn
};

关于javascript - Angular : displaying elements in navbar after logged in,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30753780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com