Angular2 提供了比angular1 更為強大的路由功能,但是在具體使用路由過程中,可是出現了很多路由不按照預想的方式執行的問題。為了說明今天的問題,我特地新建了一個測試工程。歡迎交流。
首先介紹一下測試代碼的組織結構,
其中包含兩個組件:button、accordion。這個例子采用的是ng2-bootstrap.
我展示一下路由配置:
1 /** 2 * Created by guozhiqi on 2017/2/24. 3 */ 4 import {Route,Routes}from '@angular/router'; 5 import {AppComponent}from './app.component'; 6 import {LayoutComponent}from './layout/layout.component'; 7 8 export const routes:Routes=[ 9 { 10 path:'', 11 redirectTo:'button', 12 pathMatch:'full' 13 }, 14 { 15 path:'', 16 component:LayoutComponent, 17 children:[ 18 { 19 path:'button', 20 loadChildren:'./Button/Button-guo.module#ButtonGuoModule' 21 }, 22 { 23 path:'accordion', 24 loadChildren:'./accordionguo/accordion-guo.module#AccordionGuoModule' 25 } 26 ] 27 }, 28 { 29 path:'**', 30 redirectTo:'button', 31 } 32 ];
這段路由中我定義了默認路由,會跳轉到button,但是我采用最新的angular-cli,並沒有進行跳轉,並且默認路由並沒有使用layoutcomponent組件,這是最大的問題,因為layoutcomponent組件是整個頁面的樣式文件。
目前的結果什么呢?
我展示一下appmodule.ts代碼:
1 import { BrowserModule } from '@angular/platform-browser'; 2 import { NgModule } from '@angular/core'; 3 import { FormsModule } from '@angular/forms'; 4 import { HttpModule } from '@angular/http'; 5 import {ButtonGuoModule}from './button/button-guo.module'; 6 import { AppComponent } from './app.component'; 7 import {ButtonsModule}from 'ng2-bootstrap/buttons'; 8 import {routes}from './app.routing'; 9 import {RouterModule}from '@angular/router'; 10 import {CommonModule}from '@angular/common'; 11 import {AccordionGuoModule}from './accordionGuo/accordion-guo.module'; 12 import {LayoutComponent}from './layout/layout.component'; 13 @NgModule({ 14 declarations: [ 15 AppComponent,LayoutComponent 16 ], 17 imports: [RouterModule.forRoot(routes),AccordionGuoModule, 18 BrowserModule,RouterModule,CommonModule, 19 FormsModule,ButtonGuoModule, 20 HttpModule 21 ], 22 providers: [], 23 bootstrap: [AppComponent] 24 }) 25 export class AppModule { }
請注意appmodule.ts中我標紅的引入module,如果我將accordionmodule放在buttonmodule前面,那么顯示的就是accordionmodule的內容,反之顯示的就是buttonmodule的內容。
執行結果:
1.accordionmodule在buttonmodule前面
2.buttonmodule在accordionmodule前面
請注意,更改了順序以后,務必重新編譯,重新執行 ng serve命令。
會什么會出現這個問題?歡迎大家交流。下篇我會專門解釋這個問題的答案
為了便於再現,如果有需要源代碼的可以聯系我QQ:474351703,博客園沒辦法直接上傳