2016-08-18 59 views
1

我想在控制器啓動之前使用解析來檢查用戶是否存在於localStorage中,但無法使其工作。 例子:使用es6類語法解析

//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,一飲而盡和通天transpile。 WebPack啓用了babel階段1。 我可以在這個$ state中看到resolve方法,但這不是我想要訪問它的方式。

+0

您的'登錄'狀態定義沒有控制器。所以UI路由器不會實例化登錄控制器。所以它不能傳遞任何東西給它的構造函數。 –

+0

登錄指令負責處理該頁面並定義了控制器。整個事情的工作除了解決方法 – vodich

+0

是的,這是我的觀點:因爲它不是實例化您的控制器的路由器,它不能將已解析的已記錄的用戶傳遞到控制器。控制器不是國家的控制者。它是指令的控制器,恰好在狀態模板中使用。所以這是行不通的。閱讀https://ui-router.github.io/guide/ng1/route-to-component以瞭解您必須執行的操作:使用控制器和模板,或使用組件。 –

回答

1

您的'登錄'狀態定義沒有控制器。所以UI路由器不會實例化登錄控制器。所以它不能傳遞任何東西給它的構造函數。

控制器不是狀態的控制器。它是指令的控制器,恰好在狀態模板中使用。所以這是行不通的。

閱讀https://ui-router.github.io/guide/ng1/route-to-component瞭解您必須如何操作:使用控制器和模板,或使用組件。

+0

組件方法實際上並不適用於我,可能是ui路由器版本或什麼,所以我切換到使用控制器和模板 – vodich

+0

注意:這是ui-路由器版本畢竟 – vodich