AngularJs, изменить пункт меню независимо от того, подключен пользователь или нет
Я новичок в 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) Затем он подключается к приложению, но навигационная панель не отображается с другими элементами («Настройки» и «Выход»).
Как правильно достичь этого? Чтобы использовать директиву / привязать ее к модели / или что-то еще?
спасибо заранее