서비스을 $stateProvider
이내에 사용해도 괜찮습니까?AngularJS - 앱 시작 전 경로 처리
나는 라우팅과 관련하여 많은 게시물을 보았지만 모든 사람들이 다른 접근 방식을 사용하고 로켓 과학처럼 다루기 때문에 초보자에게 혼란을주고 있습니다. 나는 처음부터 좋은 습관을 개발하고 나쁜 습관을 피하고 싶습니다. ...
목표 : 응용 프로그램이 시작되기 전에 일부 기능을 실행하고 최종 사용자에게 출력 경로를 기반으로합니다.
은 >>AuthService
을 서비스 구현 | :
은 내가 시도 무엇 토큰
- 클라이언트 사이드 (SQLite는 DB)에서 JWT 토큰을 가져 오기 : 간단한 검사 >> 작업 인증 된 >>로드 홈보기. 그렇지 않으면 뷰 등록으로 리디렉션하십시오.
- 서버 측 유효성 검사는보기
서비스 제공
myApp.factory('AuthService', function (Session) {
var authService = {};
authService.isAuthorized = function(){
return Session.authorized() ;
};
return authService;
});
myApp.service('Session', function ($resource, $q, $timeout, URL_Config) {
this.authorized = function() {
var deferred = $q.defer();
$timeout(function() {
var db = window.openDatabase("config.db", "1.0", "Config", 2 * 1024 * 1024);
db.transaction(function (tx) {
tx.executeSql("SELECT * FROM user_details", [], function (tx, data) {
var token = data.rows.item(0).token;
var request = $resource(URL_Config.BASE_URL + '/authCheck', {token: token },
{ query: {
isArray: false,
method: 'GET'
} });
request.query(function (res) {
if (res.error) {
deferred.resolve(false);
} else {
deferred.resolve(true);
}
});
}, function (e) {
deferred.resolve(false);
});
});
}, 500);
return deferred.promise;
};
return this;
});
경로 구성
이 내가 고민하고있는 부분을로드하기 전에 일어난다. 이 서비스를받는 곳과 방법 나는 그것이 작동하지만, 이것이 올바른 방법인지 여부를 확신 할 수 없다.
- 전화
$stateProvider
의 해결 재산권 내 서비스? - 을 기준으로
AuthService
의 값은보기로 리디렉션됩니다. - 응용 프로그램 시작 전의 프로세스.
myApp.config(function($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise('/home');
$stateProvider
.state('home', {
url: '/home',
templateUrl: 'templates/home.html',
controller: 'MainController',
resolve: ['AuthService', function(AuthService, $location, $q){
var deferred = $q.defer();
var authChk = AuthService.isAuthorized();
authChk.then(function(data){
if(!data){
$location.path('/register');
deferred.resolve();
} else{
$location.path('/home');
deferred.resolve();
}
}, function(e){
$location.path('/register');
deferred.resolve();
});
return deferred.promise;
}]
})
.state('register', {
url: '/register',
templateUrl: 'templates/register.html',
controller : 'RegisterController',
resolve: ['AuthService', function(AuthService, $location, $q){
var deferred = $q.defer();
var authChk = AuthService.isAuthorized();
authChk.then(function(data){
if(!data){
$location.path('/register');
deferred.resolve();
} else{
$location.path('/home');
deferred.resolve();
}
}, function(e){
$location.path('/register');
deferred.resolve();
});
return deferred.promise;
}]
})
});
이는 인증 유효성 검사를 실행할 수있는 적절한 장소인가?
이것은 Angular로 시작하는 데 필요한 간단한 Hello World 데모입니다. 나는 항법 (다중보기)이 없기 때문에 수표는 앞으로 나아갈 것입니다.
보기가로드되기 전에 locationChangeStart
을 사용하여 서비스를 시작하는 많은 예제를 보았습니다. 그런 다음 $scope.watch
및 $broadcast
은 세션을 처리 할 때 사용되지만 나중에 사용하기에 유용 할 수 있습니다.
감사합니다. 이 시나리오를 처리 할 방법과 장소에 대한 조언을 환영합니다.