angular 子组件ngOnChanges监听@input传入的输入属性

这篇具有很好参考价值的文章主要介绍了angular 子组件ngOnChanges监听@input传入的输入属性。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在进入主题之前,先了解一下angular的生命周期。

生命周期

钩子分类

  • 指令与组件共有的钩子

    • ngOnChanges
    • ngOnInit
    • ngDoCheck
    • ngOnDestroy
  • 组件特有的钩子

    • ngAfterContentInit
    • ngAfterContentChecked
    • ngAfterViewInit
    • ngAfterViewChecked

生命周期钩子的作用及调用顺序

  1. ngOnChanges - 当数据绑定输入属性的值发生变化时调用
  2. ngOnInit - 在第一次 ngOnChanges 后调用
  3. ngDoCheck - 自定义的方法,用于检测和处理值的改变
  4. ngAfterContentInit - 在组件内容初始化之后调用
  5. ngAfterContentChecked - 组件每次检查内容时调用
  6. ngAfterViewInit - 组件相应的视图初始化之后调用
  7. ngAfterViewChecked - 组件每次检查视图时调用
  8. ngOnDestroy - 指令销毁前调用

首次加载顺序


export class LifecircleComponent {

    constructor() {

        console.log('00构造函数执行了---除了使用简单的值对局部变量进行初始化之外,什么都不应该做')
    }

    ngOnChanges() {

        console.log('01ngOnChages执行了---当被绑定的输入属性的值发生变化时调用(父子组件传值的时候会触发)'); 
    }

    ngOnInit() {
        console.log('02ngOnInit执行了--- 请求数据一般放在这个里面');
    }
    ngDoCheck() {
        console.log('03ngDoCheck执行了---检测,并在发生 Angular 无法或不愿意自己检测的变化时作出反应');
    }
    ngAfterContentInit() {
        console.log('04ngAfterContentInit执行了---当把内容投影进组件之后调用');
    }
    ngAfterContentChecked() {
        console.log('05ngAfterContentChecked执行了---每次完成被投影组件内容的变更检测之后调用');
    }
    ngAfterViewInit() : void {
        console.log('06 ngAfterViewInit执行了----初始化完组件视图及其子视图之后调用(dom操作放在这个里面)');
    }
    ngAfterViewChecked() {
        console.log('07ngAfterViewChecked执行了----每次做完组件视图和子视图的变更检测之后调用');
    }

    ngOnDestroy() {
        console.log('08ngOnDestroy执行了····');
    }

    //自定义方法
    changeMsg() {

        this.msg = "数据改变了";
    }
}

 

 

 参照:https://www.cnblogs.com/Aerfajj/p/10748887.html

我们的要求是子组件监听父组件传入的值,而ngOnChanges的作用是当数据绑定输入属性的值发生变化时调用,正是我们所需要的。废话不多说,直接上代码:

父组件

<child-demo [tabValue]="tabValue"></child-demo>

 

 子组件ts(与SimpleChange配合使用)

import {Component, EventEmitter, Input, OnInit, OnChanges, SimpleChange, Output} from '@angular/core';



@Component({

  selector: 'app-child-demo',

  templateUrl: './child-demo.component.html',

  styleUrls: ['./child-demo.component.scss']

})

export class ChildDemoComponent implements OnInit {

  @Input() tabValue;

  @Output() gotoList: EventEmitter<{ goto: boolean, group: string}> = new EventEmitter<{goto: false, group: ''}>();

  constructor(private childDemoService: ChildDemoService) {

  }



  ngOnInit() {   

  }

  ngOnChanges(changes: SimpleChange){

    if (changes['tabValue']) {

      //具体业务代码

    }

  }

}
//changes['tabValue']有三个属性,currentValue-当前值  previousValue-改变之前的值 
// firstChange-是否是第一次改变(previousValue为undefined时true,否则为false)

 

 总结:

1.ngOnChanges只对@Input传入的属性发生变化时会调用。

2.当@Input属性是一个对象,当对象的属性值发生变化并不会触发,当对象的引用发生变化时才会触发,所以想要监听对象的变化,不可以直接修改对象的属性,而是要给整个对象重新赋值。文章来源地址https://www.toymoban.com/news/detail-650671.html

到了这里,关于angular 子组件ngOnChanges监听@input传入的输入属性的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Element组件(input输入框)

             格式:          input Attributes type 类型 type=\\\"\\\" 默认text value 绑定值 value=\\\"\\\" maxlength 最大输入长度 maxlength=\\\"number\\\" show-word-limit 显示剩余输入字数 默认false minlength 最小输入长度 minlenght=\\\"number\\\" placeholder 输入框占位文本 placeholder=\\\"\\\" clearable 是否可清空 默认false disabled 禁

    2024年02月07日
    浏览(25)
  • jq——监听input组件type=“radio“单选框的change事件——基础积累

    jq的基操,但是由于本人jq操作dom不熟悉,用vue习惯了,所以还是要记录一下jq的基操,多多积累,多多收获。 1.html代码 2.css代码 3.js代码 完成!!! 多多积累,多多收获!!! 1. attr(): 作用:获取/设置元素的属性 //获取北京节点的name属性值 var bj = $(“#bj”).attr(“name”);

    2024年02月11日
    浏览(59)
  • 微信小程序实现数值监听(页面和组件属性)

    简介 目前文章主要介绍对页面属性值的监听以及组件属性值的监听。需要异页面监听数据,请跳转至另一个文章介绍 为什么需要监听属性值 当需要通过一个属性变化时候,需要计算相应的方法等。pc网站经常需要监听属性,那么小程序应该怎么去实现? 1、首先创建公共的

    2024年02月09日
    浏览(61)
  • 微信小程序——自定义组件组件的创建和引用,修改组件的样式隔离选项,stylesolation的可选值,properties属性,data数据,methods方法,数据监听器,用法,监听对象属性的变化

    ①在项目的根目录中,鼠标右键,创建 components - test 文件夹 ②在新建的 components - test 文件夹上,鼠标右键,点击\\\"新建 Component \\\" ③键入组件的名称之后回车,会自动生成组件对应的4个文件,后缀名分别为 js , json ,. wxml 和. wxss 注意,为了保证目录结构的清晰,建议把不同的

    2024年02月15日
    浏览(75)
  • Flutter TextField 组件的属性、监听、赋值等详细说明

    ①获取文本框内容: _use.text.toString(); ②给文本框赋值,有两种写法: String  mUserId=\\\"123\\\"; ③文本框的监听: _use .addListener(() {   print(\\\"你输入的内容为:\\\"+ mUserId );   }); return TextField( //改变事件 onChanged: (str) { print(\\\"你改变的内容为:\\\"+ str ); },); //使用 return TextField( focusNode: _focus

    2023年04月08日
    浏览(49)
  • 基于element UI input组件自行封装“数字区间”输入框组件

    在开发时遇到一个 数字区间 输入框的需求,如下图: 项目使用的是vue,组件库用的是element UI,但是element UI并没有提供数字区间组件,只提供了InputNumber 计数器输入框,如果用两个计数器输入框进行拼接也能满足需求,但是样式调试起来太过于复杂且不够灵活,不能令人满

    2024年02月11日
    浏览(46)
  • vue+element-ui input输入框设置属性type为number去除右边的上下按键

    当 input type=number 时,去掉后面的上下按钮 1.全局样式改变: 2.在style中使用的是vue+element,通常写当前页面的样式时使用scoped,防止篡改其他页面样式,但是这样会发现上面的代码失效,此时需要使用/deep/去寻找 【定义样式】去除表框、去除上下箭头、去除滚轮事件 3.在sty

    2024年02月11日
    浏览(50)
  • 解决使用element ui时el-input的属性type=number,仍然可以输入e的问题。

    使用element ui时el-input的属性type=number,仍然可以输入e, 其他的中文特殊字符都不可以输入,但是只有e是可以输入的,原因是e也输入作为科学计数法的时候,e是可以被判定为数字的, 但是有些场景是需要把e这种情况屏蔽掉的,我们可以使用如下的方法。 在进行键盘事件输入

    2024年02月08日
    浏览(46)
  • uniapp 的input组件在@input事件中限制用户可输入数值的范围,出现视图不更新的bug。

    在input事件拿到用户输入的值,然后给input组件绑定的值赋值之前,判断用户输入的不能超过最大值,超过的话默认为100,,这个判断和赋值然后视图更新只能触发一次,之后在输入,发现值改了页面但是不更新。我擦了,v-model和:value都试过。都没用,网上描述的这个bug能追

    2024年02月16日
    浏览(38)
  • iview的表格行内编辑,input和select组件使用方向键切换输入

    如果表格中的输入框和下拉框需要实现方向键切换选择,效果如图: 使用的是 IView 的UI框架和 Vue2 ,核心是在输入框和下拉框上添加按键监听事件,监听按键对应方向应该要完成的操作,比如当前在 Name 列的第一行,按【向左键】的话,需要鼠标光标在第一行的 Address 列 f

    2024年02月13日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包