gpt4 book ai didi

AngularJs,无论用户是否连接都更改菜单项

转载 作者:行者123 更新时间:2023-12-03 06:44:32 26 4
gpt4 key购买 nike

我是 AngularJS 的新手,我尝试处理用户身份验证。

我确保未连接的用户无法访问受限路由:

app.js

  .config(function ($routeProvider) {
$routeProvider
.when('/myroute', {
templateUrl: 'views/myroute.html',
controller: 'MyrouteCtrl',
access: {
isFreeAccess: false
}
})
...
.run( function ($rootScope, $location, Auth) {

$rootScope.$on('$routeChangeStart', function(currRoute, prevRoute){

if (prevRoute.access != undefined) {
// if route requires auth and user is not logged in
if (!prevRoute.access.isFreeAccess && !Auth.isLogged) {
// redirects to index
$location.path('/');
}
}

AuthService.js

.factory('Auth', function () {
var user;

return{
setUser : function(aUser){
user = aUser;
},
isLoggedIn : function(){
return(user)? user : false;
}
}
});

login.js

$scope.login = function(user) {

$http({
url: ***,
method: "POST",
data: user,
headers: {'Content-Type': 'application/json'}
}).success(function (data, status, headers, config) {
$scope.persons = data;

Auth.setUser(data); //Update the state of the user in the app

$location.path("/");
}).error(function (data, status, headers, config) {
$scope.status = status;
});

用户状态在连接时被存储。现在我想在导航栏中显示新项目。

index.html

<div ng-include src="'views/navbar.html'"></div>

navbar.js

.controller('NavbarCtrl', function ($scope) {
$scope.items = [
{'name': 'Home', "needAuthentication": false},
{'name': 'About', "needAuthentication": false},
{'name': 'Settings', "needAuthentication": true},
{'name': 'Logout', "needAuthentication": true}
];
});

navbar.html

<div ng-controller="NavbarCtrl" class="collapse navbar-collapse navbar-ex1-collapse" role="navigation">
<ul class="nav navbar-nav navbar-right">
<li ng-repeat="item in items ">
<a ng-if="item.needAuthentication == false || (item.needAuthentication == true && Auth.isLoggedIn())" href="#{{item.name}}">{{item.name}}</a>
</li>
</ul>
</div>

当用户启动应用程序时:

1) 他尚未连接

ng-if="item.needAuthentication == false || (item.needAuthentication == true && Auth.isLoggedIn ())"

显示“主页”和“关于”项目。

2) 然后他连接到应用程序,但导航栏未与其他项目(“设置”和“注销”)一起重新呈现。

实现这一目标的正确方法是什么?使用指令/将其绑定(bind)到模型/或其他东西?

提前致谢

最佳答案

我认为 isLoogged 函数应该在定义 user 时返回 true

尝试改变

return(user)? user : false;

return(user)? true : false;

关于AngularJs,无论用户是否连接都更改菜单项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23322733/

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