Angularjs 从配置中访问控制器变量
如何访问控制器中与my.config位于同一文件中的变量?我试图在加载以下视图之前验证用户当前是否登录:Angularjs 从配置中访问控制器变量,angularjs,Angularjs,如何访问控制器中与my.config位于同一文件中的变量?我试图在加载以下视图之前验证用户当前是否登录: 'use strict'; // Declare app level module which depends on views, and components angular.module('myApp', [ 'ngRoute', 'ngStorage', 'ui.router', 'myApp.userView', 'myApp.usuarios' ]) .co
'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,以决定何时加载它。任何指针都将受到欢迎。您不能在状态解析后创建$scope
使用存储当前用户的服务或使用$rootScope。您不能这样做,$scope是在状态解析后创建的
可以使用存储当前用户的服务,也可以使用$rootScope。将登录逻辑实现为一种很好的做法,例如:
.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
};
});
因此,您可以在所有控制器中、在状态的解析功能中、在应用程序的.run()
方法中注入login\u服务
并使用其方法(登录、注销、isLogged)
您最终可以在.run()
中实现登录检查,如下所示:
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);
}
});
});
一些有用的链接:
将登录逻辑实现为一种很好的做法,例如:
.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
};
});
因此,您可以在所有控制器中、在状态的解析功能中、在应用程序的.run()
方法中注入login\u服务
并使用其方法(登录、注销、isLogged)
您最终可以在.run()
中实现登录检查,如下所示:
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);
}
});
});
一些有用的链接:
在解决方案中使用a在解决方案中使用a