この場合、Angular 2のRC5と最新のルーターを使用してこの問題が発生します。
私のroutes.tsファイルはこれです:
import {
provideRouter,
Routes,
RouterModule
}
from '@angular/router';
import {
OverviewComponent,
LoginComponent,
ProfileComponent
} from './shared';
import { AuthGuard } from './auth.guard';
import { HasToken } from './common/index';
const routes: Routes = [
{
path: '',
component: OverviewComponent,
canActivate: [AuthGuard]
},
{
path: 'login',
component: LoginComponent
},
{
path: 'profile',
component: ProfileComponent,
canActivate: [AuthGuard]
},
{
path: '**',
redirectTo: '/login'
}
];
export const authProviders = [AuthGuard, HasToken];
export const appRouterProviders = [
provideRouter(routes),
authProviders
];
export const routing = RouterModule.forRoot(routes);
そして私のapp.module.tsファイル(ブートストラップ)はこれです:
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import {NgModule} from '@angular/core';
import {RouterModule} from '@angular/router';
import {BrowserModule} from '@angular/platform-browser';
import { AppComponent } from './app.component';
import {appRouterProviders, routing} from './routes';
import {
OverviewComponent,
LoginComponent,
ProfileComponent
} from './shared';
@NgModule({
declarations: [
AppComponent,
OverviewComponent,
LoginComponent,
ProfileComponent
],
imports: [
BrowserModule,
CommonModule,
// Router
routing,
// Forms
FormsModule,
],
providers: [
appRouterProviders,
provide(AuthHttp, {
useFactory: (http) => {
return new AuthHttp(new AuthConfig({
headerName: 'Authorization',
headerPrefix: 'Bearer',
tokenName: 'token',
tokenGetter: (() => localStorage.getItem('token')),
globalHeaders: [{'Content-Type': 'application/json'}],
noJwtError: false,
noTokenScheme: false
}), http);
},
deps: [Http]
})
], entryComponents: [AppComponent],
bootstrap: [AppComponent]
})
export class AppModule {
}
そして最後に、私のエントリファイル(main.ts)は次のとおりです。
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { enableProdMode, provide } from '@angular/core';
import { Http } from '@angular/http';
import { AuthHttp, AuthConfig } from 'angular2-jwt';
import { AppModule, environment } from './app/';
if (environment.production) {
enableProdMode();
}
platformBrowserDynamic().bootstrapModule(AppModule);
だから私がng-serve
を実行しているとき(これはwebpackプロジェクトを使用したangular-cliです)、コンソールでこのエラーが発生します。
例外:エラー:ルート ''の構成が無効です:次のいずれかを指定する必要があります(コンポーネントまたはredirectToまたは子またはloadChildren)
コードの更新と新しいエラー
キャッチされていない予期しない値 'undefined'がモジュール 'AppModule'によって宣言されています
最新の更新
バレルに問題があるようです。コンポーネントをapp.module
にインポートすると、このエラーは回避されますが、他のエラーが発生します。
uri.matchは関数ではありません
もちろん、ルートにpathMatch
属性を追加しようとしましたが、何も変更されていません。
私の問題は結局非常に単純でした(非常に多くの時間を試してみました)。
解決策:バレルからコンポーネントをインポートしないでくださいそれらをフォルダから直接インポートします。
それで問題は解決しました。
更新:
また、undefined
エラーについては、私のコンポーネントのすべてがapp.moduleのimports
で宣言されていないことが問題でした。
AppModuleのインポートにRoutingModule宣言が重複しています。また、CommonModuleはBrowserModuleによってすでにエクスポートされているため、インポートする必要はありません。
インポートを次のように変更してみてください。
imports: [
BrowserModule,
CommonModule,
// Router
RouterModule,
routing,
// Forms
FormsModule,
],
これに:
imports: [
BrowserModule,
routing,
FormsModule
],
まだこの問題が発生している場合は、コンポーネントのルートを定義してから、ページの下部でコンポーネントを定義すると、このエラーがスローされます。
基本的に、このエラーはルートに提供されたコンポーネントが未定義であることを意味します。
コンポーネントクラスをルートの前に移動するか、インポートする場合は、正しくインポートされていることを確認してください。
私はあなたのルートを間違ってキャストしていると思います。ルートをインポートする必要があります。
import { Routes,provideRouter, RouterConfig, RouterModule '@angular/router';
そしてRouterConfigを作成する代わりに、
const routes: RouterConfig = []
代わりにルートを使用してください。
const appRoutes: Routes = []
これらをインポートする必要はありません
provideRouter, RouterConfig
このコードは不要
export const appRouterProviders = [
provideRouter(routes),
authProviders
];
そして
appRouterProviders,
代わりに、ルートのタイプをインポートに必要なルートに変更します
それでおしまい。