Angularv4.初体验


1389 浏览 5 years, 10 months

8 模块动态路由 Dynamic Routing of Component

版权声明: 转载请注明出处 http://www.codingsoho.com/

08 Dynamic Routing of Component

在上面path:"videos/:slug"中,slug是一个参数,接下来会讲讲怎么去处理这个参数

在video-detail.component.ts导入模块ActivatedRote

import { ActivatedRoute } from '@angular/router';

同时在OnInt里添加注册函数

  constructor(private route: ActivatedRoute) { }

  ngOnInit() {
    this.route.params.subscribe(params => {
      console.log(params)
    }) 
  }

这个函数跟下面的功能相似,typescript做了优化

  ngOnInit() {
    this.route.params.subscribe(function(params){
      console.log(params)
    })    
  }

程序销毁时,我们希望取消这个注册,可以通过ngOnDestroy来实现

更新video-detail.component.ts如下

import { Component, OnInit, OnDestroy } from '@angular/core';
export class VideoDetailComponent implements OnInit, OnDestroy {
  private routeSub:any;
  slug:string;
  constructor(private route: ActivatedRoute) { }

  ngOnInit() {
    this.routeSub = this.route.params.subscribe(params => {
      console.log(params);
      this.slug = params['slug']
    }) 
  }

  ngOnDestroy() {
    this.routeSub.unsubscribe()
  }
}

首先将注册对象保持到this.routeSub,然后在销毁时将其unsubscribe

this.slug = params['slug']将slug参数读入到slug变量,如果有多个变量也可以一起读入。然后可以在模板里渲染这个变量,例如

在video-detail.component.html

<p>
  video-detail works! {{slug}}!!!
</p>