如何访问控制器中与我的.config位于同一文件中的变量?我正在尝试验证用户当前是否在登录之前加载了这样的视图:
'use strict';
// Declare app level module which depends on views, and components
angular.module('myApp', [
'ngRoute',
'ngStorage',
'ui.router',
'myApp.userView',
'myApp.usuarios'
])
.controller("MainCtrl",['$scope','$localStorage',function($scope,$localStorage) {
$scope.user = {}
$scope.save = function(u) {
$localStorage.user = u;
};
$scope.load = function() {
$scope.user = $localStorage.user;
console.log($scope.user);
};
$scope.logoff= function() {
$localStorage.$reset();
$scope.load();
};
$scope.loginPage= function() {
var path = "/login/";
window.location.href = path;
};
$scope.load();
}])
.config(function($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise('/home');
// $urlRouterProvider.otherwise('/404');
$stateProvider
.state('userView', {
url: '/users_config',
templateUrl: 'resources/userView/userView.html',
controller: 'userViewCtrl',
resolve: {
security: ['$q', function($q){
if($scope.user == null){
$state.go("401");
}
}]
}
})
.state('404', {
url: '{path:.*}',
templateUrl: 'resources/errorView/404.html'
})
.state('401', {
url: '{path:.*}',
templateUrl: 'resources/errorView/401.html'
});
});
我想在userView状态下访问$ scope.user来决定是否应该加载它。任何指针都会受到赞赏。
答案 0 :(得分:2)
您无法在解决状态后创建$ scope。
使用存储当前用户的服务或使用$ rootScope。
答案 1 :(得分:2)
将登录逻辑实现为Service是一种很好的做法,例如:
.factory("login_service", function ($http, $q) {
var isLogged = false;
function login(username, password) {
var deferred = $q.defer();
$http.post("/login", { username: username, password: password })
.then(function (result) {
if(result.data.error == 0) {
isLogged = true;
deferred.resolve(result.data);
} else {
isLogged = false;
deferred.reject(error);
}
}, function (error) {
isLogged = false;
deferred.reject(error);
});
return deferred.promise;
}
function isLogged() {
return isLogged;
}
return {
login: login,
logout: logout,
isLogged: isLogged
};
});
因此,您可以注入login_service
并在controllers
中resolve
状态的.run()
函数中.run()
中使用其方法(登录,注销,isLogged)你的Angular app的方法。
您最终可以在app.run(function ($rootScope, $state, login_service) {
$rootScope.$on('$stateChangeStart', function (event, toState, toParams) {
event.preventDefault();
if (login_service.isLogged()==false) {
$state.go("login");
} else {
$state.go(toState.name, toParams);
}
});
});
中执行登录检查,如下所示:
{{1}}
一些有用的链接: