コントローラが起動する前にユーザがlocalStorageに存在するかどうかを確認するために解決を使用したいが、動作させることができない。 例:私はtranspileするのWebPACK、グッとバベルを使用しています :es6クラス構文でresolveを使用する
//loginDirective.js
import {LoginController as controller} from './login.controller';
import template from './login.html';
export const loginDirective =() =>{
return{
controller,
template,
scope:{},
controllerAs:'vm',
replace: true,
restrict: 'E'
}
}
//login.js
import {loginDirective} from './login.directive';
import angular from 'angular';
import uiRouter from 'angular-ui-router';
export const login = angular.module('admin', [uiRouter])
.config(($stateProvider) => {
$stateProvider.state('login', {
url : '/login',
template: '<login></login>',
resolve : {
loggedUser: function() {
if(localStorage.getItem('user')){
return true;
}
return false;
}
}
})
})
.directive('login', loginDirective);
//LoginController
'use strict';
class LoginController {
constructor($state, AuthenticationService, loggedUser) {
this.$state = $state;
this.AuthenticationService = AuthenticationService;
this.email = '';
this.password = '';
this.loggedIn = loggedUser;
}
login =() => {
this.AuthenticationService.Login(this.email, this.password).then((result) => {
this.loggedIn = result;
if (this.loggedIn === true) {
this.$state.go('home', {}, {reload: true});
}
});
}
logout =() => {
this.AuthenticationService.Logout();
this.loggedIn = false;
this.$state.go('login', {location: true});
}
}
LoginController.$inject = ['$state', 'AuthenticationService', 'loggedUser'];
export {LoginController}
これはUnknown provider: loggedUserProvider <- loggedUser
注意をスローします。 WebPackでは、ステージ1が有効になっています。 これで解決方法を見ることができます。$ stateしかし、それは私がそれにアクセスする方法ではありません。
「ログイン」状態定義にはコントローラがありません。したがって、ui-routerはログインコントローラをインスタンス化しません。したがって、コンストラクタには何も渡せません。 –
ログインディレクティブはそのページの処理を担当し、コントローラが定義されています。問題の解決方法を除いてすべてが動作します – vodich
はい、それは私の主張です。コントローラをインスタンス化するルータではないため、解決済みのログインユーザをコントローラに渡すことはできません。コントローラは状態のコントローラではありません。これは、状態のテンプレートで使用される指示のコントローラーです。だからうまくいかない。どのようにしなければならないかを理解するには、https://ui-router.github.io/guide/ng1/route-to-componentを読んでください:コントローラーとテンプレートを使用するか、コンポーネントを使用してください。 –