Angular 5 路由小结

首先要添加路由模块,通常定义为 AppRoutingModule,通过CLI指令生成:
ng generate module app-routing --flat --module=app
--flat   把这个文件放进了   src/app   中,而不是单独的目录中。
--module=app   告诉 CLI 把它注册到   AppModule     imports   数组中。
生成后的代码:
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';

@NgModule({
  imports: [
    CommonModule
  ],
  declarations: []
})
export class AppRoutingModule { }
由于通常   不会在路由模块中声明组件,所以可以删除   @ NgModule .declarations   并删除对   CommonModule   的引用。
你将会使用   RouterModule   中的   Routes   类来配置路由器,所以还要从   @angular/router   库中导入这两个符号。
添加一个   @ NgModule .exports   数组,其中放上   RouterModule   。 导出   RouterModule   让路由器的相关指令可以在   AppModule   中的组件中使用。
import { NgModule }             from '@angular/core';
import { RouterModule, Routes } from '@angular/router';

@NgModule({
  exports: [ RouterModule ]
})
export class AppRoutingModule {}

接下来就是要把项目里的路由添加进来,其中有两个必要属性:
路由定义   会告诉路由器,当用户点击某个链接或者在浏览器地址栏中输入某个 URL 时,要显示哪个视图。
典型的 Angular 路由( Route )有两个属性:
  1. path:一个用于匹配浏览器地址栏中 URL 的字符串。
  2. component:当导航到此路由时,路由器应该创建哪个组件。

RouterModule.forRoot()

你必须首先初始化路由器,并让它开始监听浏览器中的地址变化。

  RouterModule   添加到   @ NgModule .imports   数组中,并用   routes   来配置它。你只要调用   imports   数组中的 RouterModule .forRoot()   函数就行了。
这个方法之所以叫   forRoot() ,是因为你要在应用的顶级配置这个路由器。   forRoot()   方法会提供路由所需的服务提供商和指令,还会基于浏览器的当前 URL 执行首次导航。
import { NgModule } from '@angular/core';
// import { CommonModule } from '@angular/common';
import { RouterModule, Routes } from '@angular/router';

import { HeroesComponent } from './heroes/heroes.component';
import { DashboardComponent } from './dashboard/dashboard.component';

const routes: Routes = [
  // 设置默认跳转路由, full表示与path为空的路由完全匹配
  { path: '', redirectTo: '/dashboard', pathMatch: 'full' },
  { path: 'heroes', component: HeroesComponent },
  { path: 'dashboard', component: DashboardComponent }
];

@NgModule({
  imports: [
  //   CommonModule
    RouterModule.forRoot(routes)
  ],
  //declarations: [] //你通常不会在路由模块中声明组件,所以可以删除 @NgModule.declarations,并删除对 CommonModule 的引用。
  exports: [ RouterModule ]
})
export class AppRoutingModule { }

添加路由出口 (RouterOutlet

打开   AppComponent   的根模板,把   其他组件 元素替换为   < router-outlet >   元素。
能在 AppComponent 中使用   RouterOutlet,是因为 AppModule 导入了 AppRoutingModule,而 AppRoutingModule 中导出了   RouterModule

路由跳转及传参的几种形式:

1.通过路由路径传递
在html标签中用属性 routerLink="/xxx" ,可以设置路由跳转
AppRoutingModule定义的路由数组中:
{ path: 'xxx/:para', component: ComponentName } //多个参数就添加多个/:para
组建中跳转路由的代码:
<a routerLink ="/xxx/para">
2.通过路由参数
AppRoutingModule定义的路由数组中:
{ path: 'xxx', component: ComponentName }
在component.ts里通过Router的navigate方法跳转
import { Router } from '@angular/router';

....

constructor( private router: Router) { }

  toDetail(id,name){
    this.router.navigate(['xxx'], {
        queryParams: {
            id: id,
            name: name
        }
    });
  }
或者,在template上,通过添加参数属性 queryParams
<a [routerLink]="['/product']" [queryParams]="{id: 1,name: 'name'}">产品</a>
获得参数的几种形式:

import { ActivatedRoute } from '@angular/router';
...
constructor(
    private route: ActivatedRoute
  ) { }
  ngOnInit() {
//1.路由快照
    const id = this.route.snapshot.paramMap.get('para'); 
// 2.路由订阅
    this.route.params
      .subscribe((params: Params) => {
        this.id = params['para'];
      })
// 3.多个参数的时候
    this.route.queryParams
        .subscribe(queryParams => {
        this.id = queryParams.id;
        this.name = queryParams.name;
    });
  }

路由返回:
import { Location } from '@angular/common';
...
constructor(
    private location: Location
  ) { }

goBack(): void {
    this.location.back();
  }

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值