2016-08-11 56 views
1

嘗試使用3.0.0-rc.1的路由器升級到2.0.0-rc.5。Angular 2從RC4升級到RC5,錯誤:在注入路由器之前引導至少一個組件

我遵循文檔中的升級說明(從RC4中移動,對我來說工作正常)。我得到這個錯誤,不知道發生了什麼事:

Unhandled Promise rejection: Bootstrap at least one component before injecting Router. 

Zone: <root> ; Task: Promise.then ; Value: Error: Bootstrap at least one component before injecting Router. 
at  setupRouter  node_modules/@angular/router/src/common_router_providers.js:21:15) 
at NgModuleInjector .get (AppModule .ngfactory .js:227:57) 
at NgModuleInjector .AppModuleInjector .createInternal (AppModule .ngfactory .js:309:55) 
at NgModuleInjector .create 

/node_modules/@angular/core/src/linker/ng_module_factory .js:91:76) 
at NgModuleFactory .create /node_modules/@angular/core/src/linker/ng_module_factory .js:75:18) 
/node_modules/@angular/core/src/application_ref .js:341:43) 
at ZoneDelegate .invoke 
/node_modules/zone .js/dist/zone .js:323:29) 
at Object .onInvoke 
node_modules/@angular/core/src/zone/ng_zone_impl.js:53:41) 
at ZoneDelegate 
/node_modules/zone.js/dist/zone .js:322:35) 
at Zone.run /node_modules/zone .js/dist/zone .js:216:44) 
+0

添加一些代碼,添加主'NgModule'的外觀。你有沒有添加引導組件? –

+0

確定似乎問題是注入路由器到一些現有組件的構造函數,刪除注入和錯誤消失。 – lcurrens

+0

我有同樣的錯誤,但我的代碼庫中沒有組件或服務注入路由器到它的構造函數:( – ulfryk

回答

3

問題:https://github.com/angular/angular/issues/11660

解決方案:當你注入路由器到服務,這需要路由器,這樣的事情

@NgModule({ 
    imports : [ 
     BrowserModule 
    ], 
    providers : [ 
     { 
     provide : Http, 
     useFactory: (
      xhrBackend: XHRBackend, 
      requestOptions: RequestOptions, 
      router: Router, <-- our problem 
      constantsService:ConstantsService, 
      loaderComponentHelper: LoaderComponentHelper 
     ) => new HttpInterceptor(xhrBackend, requestOptions, router, constantsService, loaderComponentHelper), 
     deps: [XHRBackend, RequestOptions, Router, ConstantsService, LoaderComponentHelper], 
    }, 
    { 
     provide : AuthHttp, 
     useFactory: (http: Http, authService: AuthService, constantsService: ConstantsService) => { 
      return new AuthHttp(http, authService, constantsService); 
     }, 
     deps : [Http, AuthService, ConstantsService] 
    }] 
}) 

使用Injector ,只需將其傳遞給構造函數,然後在其中定義它

import {Injector} from '@angular/core'; 

this.router = this.injector.get(Router); 

但是不要在構造函數中這樣做

+0

,所以你必須重構每個使用路由器的類? –