路由

带路由项目与普通项目的区别

  1. 创建了一个app-routing.module.ts ```typescript import { NgModule } from ‘@angular/core’; import { Routes, RouterModule } from ‘@angular/router’;

const routes: Routes = [];

@NgModule({ // 只在根模块AppRoutingModule中调用RouterModule.forRoot()(如果在AppModule中注册应用的顶层路由,那就在AppModule中调用)。 // 在其他模块中,必须调用RouterModule.forChild()方法来注册附属路由 // forRoot()方法会提供路由所需的服务提供者和指令,还会基于浏览器的当前URL执行首次导航 imports: [RouterModule.forRoot(routes)], // 导出RouterModule,以便在整个应用程序中生效 exports: [RouterModule] }) export class AppRoutingModule { }

  1. 2. 为不带路由的项目增加路由模块:
  2. > --flat 把这个文件放进了 src/app中,而不是单独的目录中。
  3. >
  4. > --module=app 告诉CLI把它注册到AppModuleimports数组中
  5. ```shell
  6. ng g module app-routing --flat --module=app


然后将路由的符号导入、编写路由;
接着声明@NgModule的imports和exports

  1. 在app.module.ts里加入app-routing模块 ```typescript import { BrowserModule } from ‘@angular/platform-browser’; import { NgModule } from ‘@angular/core’;

import { AppRoutingModule } from ‘./app-routing.module’;

@NgModule({ declarations: [ AppComponent ], imports: [ BrowserModule, AppRoutingModule ], providers: [], bootstrap: [AppComponent] }) export class AppModule { }

  1. 4. app.component.html里添加了`<router-outlet>`标签
  2. > router-outlet标签为路由出口,会告诉路由器要在哪里显示路由的视图。
  3. >
  4. > 能在AppComponent中使用RouterOutlet,是因为AppModule导入了AppRoutingModule,而AppRoutingModule中导出了RouterModule
  5. ```html
  6. <!-- 其他内容可删除 -->
  7. <router-outlet></router-outlet>

路由配置

  1. 路由模块不是必须的,也可以直接在需要使用路由的模块内编写路由。
    例如,在app.module.ts中加入路由: ```typescript const appRoutes: Routes = [ // 路由配置 ];

@NgModule({ imports: [ RouterModule.forRoot( appRoutes, { enableTracing: true } // 会把每个导航生命周期中的事件输出到浏览器的控制台,这应该只用于调试 ) // other imports here ], … }) export class AppModule { }

  1. 2. 在路由模块中添加路由
  2. ```typescript
  3. import { NgModule } from '@angular/core';
  4. import { Routes, RouterModule } from '@angular/router';
  5. // 在路由模块引入需要配置的组件
  6. import { HomeComponent } from './components/home/home.component';
  7. import { NewsComponent } from './components/news/news.component';
  8. import { ProductComponent } from './components/product/product.component';
  9. // 路由的配置顺序:具体路由应该放在通用路由前。因为路由器使用先匹配者优先的策略来匹配路由
  10. const routes: Routes = [
  11. {
  12. path: 'home', // 跳转路径,前面不加斜杠
  13. component: HomeComponent // 路径/home跳转的组件
  14. },
  15. {
  16. path: 'news',
  17. component: NewsComponent
  18. },
  19. {
  20. path: 'product',
  21. component: ProductComponent
  22. },
  23. {
  24. path: '**', // 前面路由都匹配不到时,使用该组件,一般用于配置跳转404页面或跳转至首页
  25. redirectTo: 'home' // 跳转至path:'home'的组件
  26. }
  27. ];
  28. @NgModule({
  29. imports: [RouterModule.forRoot(routes)],
  30. exports: [RouterModule]
  31. })
  32. export class AppRoutingModule { }
  1. 编写app.component.html
    1. <h2>根组件</h2>
    2. <!-- router-outlet会展示跳转的组件内容 -->
    3. <router-outlet></router-outlet>
  1. 在地址栏输入http://localhost:4200/home,便会在 <router-outlet> 标签的位置显示HomeComponent组件的内容。

使用routerLink自动跳转

  1. 在app.component.html添加一个 带有routerLink的a标签,routerLink内为跳转地址: ```html

    根组件

首页 新闻 商品

  1. <br />编写一个简单的less导航样式:
  2. 2. 使用routerLinkActive为选中的routerLink添加选中样式。routerLinkActive内容为选中该routerLink后执行的css的class名称,该名称可以自定义
  3. ```html
  4. <h2>根组件</h2>
  5. <header class='header'>
  6. <a [routerLink]="[ '/home' ]" routerLinkActive="aaa">首页</a>
  7. <a [routerLink]="[ '/news' ]" routerLinkActive="aaa">新闻</a>
  8. <a [routerLink]="[ '/product' ]" routerLinkActive="aaa">商品</a>
  9. </header>
  10. <router-outlet></router-outlet>


在less中添加.aaa样式