angular2中input与output实战

本文介绍Angular框架中如何实现父子组件间的通信,详细解释了input和output装饰器的使用方法,并通过实例展示了数据从父组件传递到子组件以及子组件触发事件通知父组件的具体过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

小编最近在解决input与output的问题,做了一个小栗子给大家展示一下


input

表示的是父组件与子组件之间的属性的关系,input是由父组件流向子组件的过程。为什么会由父组件流向子组件呢?因为子组件需要获得父组件的值,所以必须是父组件给组件。在做input的时候我们必须有这几个步骤


  • 父组件中的html标签是否用了子组件的选择器
  • 父组件中的属性叫什么名字(记住,因为在子组件要用)
  • 父组件中的模块用子组件的compont。
  • 孩子组件component中用@input与你父组件的时候名称一样
  • 孩子组件中html中进行显示
  • 程序运行首先是走父组件,然后根据选择器和compont找到子组件和子组件的选择器

代码显示

dataparent.component.html

<app-datagridchild [values]="data"</app-datagridchild>

dataparent.component.ts

 //声明数组
  data: Array<Object>;
  constructor() { 
  this.data = [
    {
        "id": 1,
        "name": "王"
    },
    {
        "id": 2,
        "name": "雪"
    },
    {
        "id": 3,
        "name": "芬"
    },
    {
        "id": 4,
        "name": "ionic"
    },
    {
        "id": 5,
        "name": "node"
    }
   ]

dataparent.module.ts

 declarations: [
    DataparentComponent, 
    DatagridchildComponent, //引入孩子的组件,然后找到组件进行显示
    ChildComponent
  ]

孩子:datagridchild.component.ts

 @Input()//属性
  values:Array<object>;

datagridchild.component.html

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

页面显示效果
这里写图片描述


Output

Output是子组件向父组件流向,为什么这么说呢?因为output针对的是事件,如果我们我们触发事件肯定时从子组件触发,然后父组件去执行,执行的过程其实与input是一样的,就是在触发事件的时候有点不一样


  • 父组件中的html标签是否用了子组件的选择器
  • 父组件中的click事件叫什么名字(记住,因为在子组件要用)
  • 父组件中的模块用子组件的compont。
  • 父组件的compont中写一个点击事件的方法(执行相应的内容)
  • 孩子组件component中用@Output与你父组件的时候名称一样
  • 引用import { Component, OnInit, Input, , Output, EventEmitter, ,} from ‘@angular/core’;
  • 孩子组件component中用 @Output() childEvent=new EventEmitter();
    • 孩子组件component中执行相应的事件
  • 孩子组件中html中进行显示
  • 程序运行首先是走父组件,然后根据选择器和compont找到子组件和子组件的选择器

代码显示

dataparent.component.html

<app-datagridchild [values]="data" (childEvent) = "getChildEvent($event)"></app-datagridchild>

dataparent.component.ts

  //点击事件,获取孩子传过来的index
  getChildEvent(index){
    console.log(index);
    //表示删除从1index元素
    this.data.splice(index,1);
  }

datagridchild.component.ts

  @Output() childEvent=new EventEmitter<any>();
  fireChildEvent(index){
    //emit(按照参数的顺序执行每个监听器,如通有事件注册监听则返回true)
    this.childEvent.emit(index);
  }

datagridchild.component.html

<p *ngFor="let item of values; let i = index" (click)="fireChildEvent(i)">
  {{item.name}}
</p>

由于是动态图,所以没有办法显示给大家看

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王雪芬-ghqr-264962

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值