美文网首页web前端
angular-父子组件通信

angular-父子组件通信

作者: 姜治宇 | 来源:发表于2020-11-15 20:41 被阅读0次

在vue中,父子组件的通信一般是单向的,父组件把某个数据传给子组件,而子组件不能直接修改这个数据,需要通过自定义事件回传给父组件。
angular是如何实现的呢?
首先定义两个组件:

ng g component components/father
ng g component components/child

子组件接收父组件的数据,我们需要使用@Input()装饰器,而子组件修改了数据做事件回传时,则需要@Output()装饰器。

  @Input() listdata:any; // 接收父组件的数据
  @Output() addItem = new EventEmitter(); // 回传给父组件的方法

在使用@Output()装饰器时,又需要引入EventEmitter,因此我们都需要import进来:

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

下面是一个简单的实例。
在父组件通过延时模拟ajax,往子组件传递一个数组,子组件接收到数据后进行列表渲染;
然后点击按钮,可以新增一条数据,新增的数据必须通过自定义事件回传给父组件,父组件接收到数据后,在数组后面push一条。
以上就是一个完整的单向数据流动。

father.component.html:

<app-child [listdata]="listdata"
 (addItem)="addListdata($event)"
>
</app-child>


father.component.ts:

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

@Component({
  selector: 'app-father',
  templateUrl: './father.component.html',
  styleUrls: ['./father.component.scss']
})
export class FatherComponent implements OnInit {
  public listdata:Array<Object>; // 声明列表数据

  constructor() { }
 
  ngOnInit(): void {
    setTimeout(()=>{
      this.listdata =  [{id:1,name:'a'},{id:2,name:'b'}]
    },1000);
  }
  addListdata(e){
    // console.log(e)
    this.listdata.push(e)
  }

}

child.component.html:

<ul>
    <li *ngFor="let item of listdata">
        {{item.id}}---{{item.name}}
    </li>
</ul>

<button (click)="addMethod()">增加一条数据</button>

child.component.ts:

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

@Component({
  selector: 'app-child',
  templateUrl: './child.component.html',
  styleUrls: ['./child.component.scss']
})
 //单向数据流动,子组件接收父组件的数据,然后通过自定义事件,将改变后的数据回传父组件
export class ChildComponent implements OnInit {
  @Input() listdata:any; // 接收父组件的数据
  @Output() addItem = new EventEmitter(); // 回传给父组件的方法
  constructor() { }

  ngOnInit(): void {
  }
  addMethod(){ //增加一条数据
    let len = this.listdata.length + 1
    let obj = {id:len,name:"add item"}
    this.addItem.emit(obj);//传给父组件obj这个数据
  }

}

相关文章

  • angular-父子组件通信

    在vue中,父子组件的通信一般是单向的,父组件把某个数据传给子组件,而子组件不能直接修改这个数据,需要通过自定义事...

  • vue中的组件通信

    一、组件通信(组件传值) 1.1父子组件通信 1.2子父组件通信 1.3非父子组件通信(兄弟组件通信)

  • 组件通信

    组件关系 组件关系可以分为父子组件通信、兄弟组件通信、跨级组件通信。 父子组件通信 1. 子组件使用 $emit(...

  • Vue如何实现组件通信?

    Vue组件通信的三种情况: 父子通信 爷孙通信 兄弟通信 父子通信:父组件使用Prop向子组件传递数据,子组件通过...

  • [Vue]组件之间如何通信?

    组件通信可以大致分为两种情况,父子组件之间的通信和非父子组件之间的通信,下面来分别介绍 一、父子组件之间的通信 1...

  • Vue入门系列(五)组件通信

    组件内通信主要分为两种:父子组件通信和子组件之间通信。 1.父子组件通信 父组件通过props属性向子组件传递数据...

  • Vue3组件化(二):非父子组件的通信、插槽Slot

    非父子组件的通信 在开发中,我们构建了组件树之后,除了父子组件之间的通信之外,还会有非父子组件之间的通信。这里我们...

  • Vue相关知识点

    1、vue父子组件之间的通信 在vue组件通信中其中最常见通信方式就是父子组件之中的通性,而父子组件的设定方式在不...

  • 12.组件化开发2-非父子组件之间通信-祖先和后代之间的通信

    在开发中,我们构建了组件树之后,除了父子组件之间的通信之外,还会有非父子组件之间的通信。非父子组件的通信又可以分为...

  • vue2中eventbus遇到的坑

    前言 vue组件非常常见的有父子组件通信,兄弟组件通信。而父子组件通信就很简单,父组件会通过 props 向下传数...

网友评论

    本文标题:angular-父子组件通信

    本文链接:https://www.haomeiwen.com/subject/pzbbbktx.html