我们在实际项目中会拆分各个功能模块,以便页面复用,避免重复工作。那么,这里就涉及到组件之间的交互问题。例如常使用的,输入型数据绑定、setter截听、ngOnChanges()截听以及通过创建引入服务来通讯。这篇文章着重看下关于ngOnChanges()方法监听数据变更。

Angular 组件交互 ngOnChanges 监听某一属性值变更​www.deathghost.cn

有时候瞪大眼睛看文档,也会遗漏掉所谓“不起眼”的关键点。话又说回来,只有在遇到问题的时候才会去解决问题;如果一直没遇到,可能就不会知道它的存在。下面看看几种常用的组件交互方法,其他的参阅官方文档。

通过输入型绑定把数据从父组件传到子组件
例如:我们在父组件获取到用户ID将其传入<app-user-list>组件。

<app-user-list [userId]="userId"></app-user-list>

那么在.TS中我们就可以通过@Input() 获取。

export class UserListComponent {// ...@Input() userId: number;// ...
}

通过 setter 截听输入属性值的变化

export class UserListComponent {private _userId: number;@Input()set userId(userId: number) {this._userId= userId;}get userId(): number{ return this._userId; }
}

父组件和子组件通过服务来通讯

可参阅这篇文章。

通过ngOnChanges()来截听输入属性值的变化

使用 OnChanges 生命周期钩子接口的 ngOnChanges() 方法来监测输入属性值的变化并做出回应。当需要监视多个、交互式输入属性的时候,本方法比用属性的 setter 更合适,所以具体根据实际场景而定。

先了解下Angular生命周期钩子

当 Angular 实例化组件类并渲染组件视图及其子视图时,组件实例的生命周期就开始了。生命周期一直伴随着变更检测,Angular 会检查数据绑定属性何时发生变化,并按需更新视图和组件实例。当 Angular 销毁组件实例并从 DOM 中移除它渲染的模板时,生命周期就结束了。当 Angular 在执行过程中创建、更新和销毁实例时,指令就有了类似的生命周期。

一旦检测到该组件或指令的输入属性发生了变化,Angular 就会调用它的 ngOnChanges() 方法。ngOnChanges() 方法获取了一个对象,它把每个发生变化的属性名都映射到了一个SimpleChange对象, 该对象中有属性的当前值和前一个值。这个钩子会在这些发生了变化的属性上进行迭代,并记录它们。

用途:当 Angular 设置或重新设置数据绑定的输入属性时响应。

时机:在 ngOnInit() 之前以及所绑定的一个或多个输入属性的值发生变化时都会调用。

为什么这里着重说明ngOnChanges() 方法?

实际项目中,我个人一直混合使用上述方法处理,但是今天遇到多属性值同时含有双向绑定的属性,出现了多次执行(HTTP请求)的问题。唯独忽略了SimpleChange对象。所以在此笔记下✍。

假如组件上绑定3个属性对象值,只需要在属性“current”值发生变更时才执行。

import { ***, SimpleChanges } from '@angular/core';
{current: SimpleChange}
{update: SimpleChange}
{orderDetail: SimpleChange}
ngOnChanges(changes: SimpleChanges) {// current 属性值变更时if (changes.current) {this.getData();}
}

问题点就在这里,文档上也有说明,就是应用时没在意 。所以我们只需要判断是否为某个属性值变更,方才执行其他方法。有的场景下使用ngOnChange()比上述其他方式更方便。

angular 指令渲染_Angular 组件交互 ngOnChanges 监听某一属性值变更相关推荐

  1. angular 指令渲染_Angular JS指令有后期渲染回调吗?

    我刚刚得到指令,将模板插入到其元素中,如下所示: # CoffeeScript .directive 'dashboardTable', -> controller: lineItemIndex ...

  2. angular监听输入框值的变化_angular 实时监听input框value值的变化触发函数方法

    用angulajs + ionic 做了一个登陆页面.效果要通过监听输入框的变化来判断登陆按钮是否可点击.当至少一个输入框为空时登录按钮不可点击.一开始是用的jquery的方法做的,后来发现刷新当前页 ...

  3. vue 组件属性监听_详解vuex 中的 state 在组件中如何监听

    前言 不知道大家有没有遇到过这样一种情况? vuex中的state会在某一个组建中使用,而这个状态的初始化是通过异步加载完成的.组件在渲染过程中,获取的state状态为空.也就是说组件在异步完成之前就 ...

  4. iOS OC与JS交互(WebView监听事件)

    在iOS应用的开发过程中,我们经常会使用到WebView,当我们对WebView进行操作的时候,有时会需要进行源生的操作.那么我记下来就与大家分享一下OC与JS交互. 首先先说第一种方法,并没有牵扯O ...

  5. 小程序组件中的监听事件

    小程序组件中的监听事件 需求: 微信小程序中,如果进行使用了component级的组件的话,在一些情况下,父组件中使页面中的数据进行变化,子组件中 的数据不会一起变化,由此可以使用该方法 方法: 使用 ...

  6. Vue watch如何同时监听多个属性?

    vue watch如何同时监听多个属性 第一种方法 data () {return {name1: '',name2: '',age: ''}},watch: {'name1': function ( ...

  7. python 文本框内容变化_监听文本输入框内容值的改变——4种方法

    以下是addTarget: import "ViewController.h" @interface ViewController () @property (weak, nona ...

  8. Vue.js开发记录--用watch监听对象中属性的变化

    监听对象中所有属性 存在对象obj,若想要监听其中所有的值的变化 watch: {obj: {handler (val) {// coding},deep: true}, } 监听对象中某个属性 如果 ...

  9. java 事件监听器是组件_JavaWeb的三大组件之事件监听组件(Listener)

    JavaWeb监听器 三大组件: Servlet Listener Filter 监听器: 它是一个接口,内容由我们来实现: 它需要注册,例如注册在按钮上! 监听器中的方法,会在特殊事件发生时被调用! ...

最新文章

  1. iOS三种拨打电话的方法
  2. 通过severlet获取请求头信息
  3. php如何对数据类型检测 有哪些方法,php检测数据类型的几种方法汇总
  4. 安置和设置Opera9.50Beta2
  5. URLCache探索
  6. Android 对okhttp的封装
  7. java的归并排序算法_归并排序算法Java实现
  8. angular 加入原生html,Angular HTML绑定
  9. php curl跨域cookie_PHP curl模拟文件上传(接口请求实现跨域文件中转)
  10. 索引导航-第三版-pyhui
  11. 小程序上传服务器图片压缩,微信小程序压缩图片并上传到服务器(拿去即用)...
  12. 上海新中考体育考试方案公布:总分30分不变
  13. mark点Z3学习资料整理
  14. python多态如何理解_大家对python中多态是如何理解的?
  15. 【转】C#中Serializable序列化实例详解
  16. 常用类 String,Stringbuffer,Stringbuilder 包装类 日期类
  17. R语言检验数据正态分布
  18. MacBook快捷键
  19. 只会纯硬件,让我有点慌
  20. 手把手教你搭建用户标签体系

热门文章

  1. java socket编程 聊天_基于java的socket简单聊天编程
  2. 自定义_Excel中的自定义函数(自定义函数的基础内容)
  3. 如何写_如何写营销软文?
  4. mysql停止更新时间_我如何更新这个MySQL查询以获取从开始、停止、暂停和恢复事件经过的总时间...
  5. scp连接linux网络错误,winscp连接linux(centos7)时提示主机超过15秒无通信,继续等待的解决方法...
  6. 建立一个mysql 文件命令是_使用命令行创建数据库
  7. js--小结⑥---typeof
  8. 计算机在线应用分为,在线计算器的分类和使用方法
  9. android recover 系统代码分析 -- 选择进入
  10. zybo上运行linux,Zybo开发板linux作业系统移植