onChanges钩子使用

该钩子在父组件初始化或者修改子组件的不可变对象输入参数时被调用

首先理解两个概念:

1.可变对象:

在js中,对象是可变的

例如:

var user={
    name:"jerry";//在对象中创建了一个值为jeery的name对象
  }
  user.name="honny";//给name赋值一个新的值。这个时候并不会个对象name分配新的内存地址。
而是在原来的地址上修改了原来的值


2.不可变对象:

在js中字符串是不可变的,也是说当一个字符串在内存中被创建后,他的值永远是不变的;

例如

var greeting="hello";//创建一个值为hello的字符串
greeting="hello xiaopang"//在内存中创建一个值为hello xiaopang的新的字符串,它并没有改变第一个字符串的值只是目前内存中存在两个字符串
// 对于greeting这个变量来说是可变的,他的值从内存中的hello字符串指向了
// 字符串hello xiaopang
可变不可变在于是否分配了新的内存地址

接下来看一个例子

1.子组件的模板:显示

<p>
  我是子组件
</p>
<p>问候语{{greeting}}</p>
<p>姓名{{user.name}}</p>
<p>消息:<input [(ngModel)]="message"></p>
2.子组件的component三个参数,一个输入属性装饰的可变对象参数,一个输入属性装饰的不可变对象参数。一个本地不可变参数

import {Component, Input, OnChanges, OnInit, SimpleChanges} from '@angular/core';

@Component({
  selector: 'app-child',
  templateUrl: './child.component.html',
  styleUrls: ['./child.component.css']
})
export class ChildComponent implements OnInit,OnChanges {


  @Input()
greetig:string;
@Input()
user:{name:string};
message:string="初始化";
  constructor() { }

  ngOnInit() {
  }
  ngOnChanges(changes: SimpleChanges): void {
   console.log(JSON.stringify(changes,null,2));
  }

}
3.父组件的component;顶一个一个可变对象参数,一个不可变对象参数

greeting:string="hello";
user:{name:string}={name:"tom"};
4.父组件的模板 将两个值通过输入属性传递给子组件

<p>我是父组件</p>
<div>问候<input type="text"  [(ngModel)]="greeting" />
  姓名<input type="text"  [(ngModel)]="user.name"/>
</div>
<div></div>
<app-child [greetig]="greeting" [user]="user "></app-child>
效果:


1.当页面初始化之后,自组件接收到了父组件的值,触发了第一次onchanges钩子

2.当修改父组件的不可变属性greeting时,再次触发了onchanges钩子,并且没修改一次触发一次

3.修改父组件的可变属性name的时候不会触发onchangges钩子



结果:get到的重点

触发Onchanges钩子的条件是

父组件初始化子组件时,或者修改子组件的输入属性中的不可变对象输入参数时

1.初始化或者修改子组件

2.必须是修改输入属性

3.修改的输入属性必须是不可变对象

也就是说父组件,不可变对象,输入属性,修改



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值