【Angular4学习】--参数快照与参数订阅

Angular 4 专栏收录该内容
28 篇文章 0 订阅

前言

在上篇文章的demo中,我们采取了参数快照的方式来获取URL传递过来的参数,(详见上篇博文)获取参数的方式不仅仅有参数快照还有参数订阅,那他们之前效果有怎样的差别,实现方式上又有什么不同呢? 小编接下来分享给大家。

参数快照展示:

这里写图片描述

出现的问题

我们会发现,当点击主页之后再点击商品详情连接,或者商品详情按钮的时候,参数都可以被正确的拿到。 但是点击完商品详情连接再点击商品详情按钮的时候,参数却不能正确的被获取了。

问题解析:

(1)从home组件路由到product组件时候,product组件被创建,这时它的的constructor方法被调用,ngonInit()被调用一次,页面上的参数id会根据URL信息拿到正确的参数。
(2)当我们从product组件又调到product组件时,由于在product组件已经被创建过一次了,所以constructor()方法不会被调用,所以oninit方法也不会再调用 ,所以id属性依然保持着第一次被创建时赋予的值。

参数订阅

解决参数快照问题的方式叫做参数订阅,name参数订阅是怎么实现的呢?

    import { Component, OnInit } from "@angular/core";
    import { ActivatedRoute } from "@angular/router";
    import { Params } from "@angular/router";
    @Component({
    selector: 'app-product',
    templateUrl: './product.component.html',
    styleUrls: ['./product.component.css']
    })
    export class ProductComponent implements OnInit {
    private productId:number; //定义一个变量来接收路由传递过来的productId
    constructor(private routeInfo: ActivatedRoute) { } 
    ngOnInit() {
    // 前一种参数快照来获取传递过来的参数
    //this.productId=this.routeInfo.snapshot.params["id"];

    //参数订阅,订阅后声明一个匿名函数来处理传递过来的参数,从参数取出id
    this.routeInfo.params.subscribe((params:Params)=>this.productId=params["id"]);
      }
    }

参数订阅效果展示

这里写图片描述

  • 0
    点赞
  • 11
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值