首页 技术 正文
技术 2022年11月18日
0 收藏 803 点赞 4,426 浏览 2030 个字

概述

Angular中的输入输出是通过注解@Input@Output来标识,它位于组件控制器的属性上方。

输入输出针对的对象是父子组件。

演示

Input

  • 新建项目connInComponents:ng new connInComponents.
  • 新增组件stock:ng g component stock.
  • stock.component.ts中新增属性stockName并将其标记为输入@Input():
  @Input()
protected stockName: string;
  • 既然有@Input()则应有对应的父组件,此处使用默认生成的主组件app.

    在父组件中定义属性keyWork并通过视图文件app.component.html中的标签<input>来进行双向绑定,最后,在视图文件app.component.html中嵌入子组件并进行赋值:

//ts
protected keyWord: string;//html
<input placeholder="请输入股票名称" [(ngModel)]="keyWord">
<app-stock [stockName]="keyWord"></app-stock>

注意,[(ngModel)]需要在app.module.ts中引入模块FormsModule

这样就完成了父组件向子组件赋值的操作了。

  • 在子组件中进行展示
<p>
stock works!
</p>
<div>
股票名称:{{stockName}}
</div>

Output

Output的赋值操作不像Input那样简单,它需要通过位于@angular/core包下的EventEmitter对象来监听并处理数据。并且需要传入泛型类来规定参数类型。

需求

在父子组件中各自定义一个表示股票价格的属性,并通过Output将子组件中的价格信息传给父组件。

  • 由于EventEmitter需要传入泛型类,因此我们首先定义一个股票信息类:
export class StockInfo {
constructor(public name: string, public price: number) {
this.name = name;
this.price = price;
}
}
  • 在子组件stock.component.ts中新增属性stockPriceevent,并在初始化方法中为stockPrice赋值并通过event将当前绑定对象发射出去:
  protected stockPrice: number;
@Output()
protected event: EventEmitter<StockInfo> = new EventEmitter(); ngOnInit() {
setInterval(() => {
const stock: StockInfo = new StockInfo(this.stockName, 100 * Math.random());
this.stockPrice = stock.price;
this.event.emit(stock);
}, 3000);
}

此时子组件的发射动作已完成,那么如何接收发射的数据呢?

  • 在父组件中定义价格属性currentPrice和接收方法eventHandler
  protected currentPrice: number;  eventHandler(stock: StockInfo) {
this.currentPrice = stock.price;
}
  • 在嵌入的子组件视图元素<app-stock>上添加绑定关系:
<app-stock [stockName]="keyWord" (event)="eventHandler($event)"></app-stock>

其中event对应子组件属性,eventHandler对应父组件接收并处理子组件传来的方法,$event代表泛型类参数,此处是一个类型为StockInfo的实例。

此时赋值操作已经完成,在父子组件的视图文件中添加显示接收到的信息(股票价格)即可:

stock.component.html

<div>
股票名称:{{stockName}}<br>当前价格:{{stockPrice | number:'2.1-2'}}
</div>

app.component.html

<div>
股票名称:{{keyWord}}<br>当前价格:{{currentPrice | number:'2.1-2'}}
</div>

tips

@Output可以传递参数,其值与嵌入的子组件视图元素<app-stock>上绑定的数据名称统一。

@Output('lastPrice'),那么

<app-stock [stockName]="keyWord" (event)="eventHandler($event)"></app-stock>

相应改为:

<app-stock [stockName]="keyWord" (lastPrice)="eventHandler($event)"></app-stock>

效果

Demo

下载

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,914
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,438
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,252
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,063
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,698
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,734