Angular4学习笔记(六)- Input和Output
概述
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中新增属性stockPrice和event,并在初始化方法中为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
Angular4学习笔记(六)- Input和Output的更多相关文章
- Angular4学习笔记-目录汇总
Angular4学习笔记(一)-环境搭建 Angular4学习笔记(二)-在WebStorm中启动项目 Angular4学习笔记(三)- 路由 Angular4学习笔记(四)- 依赖注入 Angula ...
- Angular4学习笔记(十)- 组件间通信
分类 父子组件通信 非父子组件通信 实现 父子 父子组件通信一般使用@Input和@Output即可实现,参考Angular4学习笔记(六)- Input和Output 通过Subject 代码如下: ...
- Spring Boot 学习笔记(六) 整合 RESTful 参数传递
Spring Boot 学习笔记 源码地址 Spring Boot 学习笔记(一) hello world Spring Boot 学习笔记(二) 整合 log4j2 Spring Boot 学习笔记 ...
- java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)
java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...
- Learning ROS for Robotics Programming Second Edition学习笔记(六) indigo xtion pro live
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
- Typescript 学习笔记六:接口
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- python3.4学习笔记(六) 常用快捷键使用技巧,持续更新
python3.4学习笔记(六) 常用快捷键使用技巧,持续更新 安装IDLE后鼠标右键点击*.py 文件,可以看到Edit with IDLE 选择这个可以直接打开编辑器.IDLE默认不能显示行号,使 ...
- Go语言学习笔记六: 循环语句
Go语言学习笔记六: 循环语句 今天学了一个格式化代码的命令:gofmt -w chapter6.go for循环 for循环有3种形式: for init; condition; increment ...
- 【opencv学习笔记六】图像的ROI区域选择与复制
图像的数据量还是比较大的,对整张图片进行处理会影响我们的处理效率,因此常常只对图像中我们需要的部分进行处理,也就是感兴趣区域ROI.今天我们来看一下如何设置图像的感兴趣区域ROI.以及对ROI区域图像 ...
- Linux学习笔记(六) 进程管理
1.进程基础 当输入一个命令时,shell 会同时启动一个进程,这种任务与进程分离的方式是 Linux 系统上重要的概念 每个执行的任务都称为进程,在每个进程启动时,系统都会给它指定一个唯一的 ID, ...
随机推荐
- 潭州课堂25班:Ph201805201 python 模块json,os 第六课 (课堂笔记)
json 模块 import json data = { 'name':'aa', 'age':18, 'lis':[1,3,4], 'tupe':(4,5,6), 'None':None } j = ...
- [POI2011]Inspekcja
[POI2011]Inspekcja 题目大意: 给你一棵\(n(n\le10^6)\)个点的树,\(s\)为起点.每次选择一个点作为目标点\(t_i\),沿最短路走到\(t_i\)再走回\(s\)( ...
- C#中使用 SendMessage 向非顶端窗体发送组合键
开门见山,不废话了, 直接举例说明一下: 比如发送ALT + F 以下是 用spy++截取的消息内容 <00001> 000310DC P WM_SYSKEYDOWN nVirtKey:V ...
- Android 创建单独的服务运行在后台(无界面)
转自:https://blog.csdn.net/a704225995/article/details/56481934 今天项目有个需求是,开启一个服务单独运行在后台,而且还不能有界面,在度娘搜索了 ...
- 5、Python文件类型
Python文件类型 源代码 Python源代码的文件以"py"为扩展名,由Python程序解释,不需要编译 字节代码 Python源文件经编译后生成的扩展名为"pyc& ...
- haproxy负载均衡的安装配置
haproxy是一款可靠,高性能的并且可以支持TCP/HTTP的负载均衡器,和前面说过的nginx负载均衡类似,这里haproxy对于负载均衡来说更专业,支持的配置选项更多,稳定性也很强,甚至只需要一 ...
- CDH:cdh5环境mkdir: Permission denied: user=root, access=WRITE, inode="/user":hdfs:hadoop:drwxr-xr-x
产生问题原因: 环境hadoop2,cdh5创建 使用hadoop fs -mdkir /use/xxx创建文件路径时,出现权限问题 前提我们已经把当前用户zhangsan和root放到/etc/su ...
- (转)Render Path
Render Path定义Render Path,就是采取的光照流程. Render Path设置可以在Edit-> Project Settings->Player 里设定,见下图.也可 ...
- 设置nginx和php-fpm更改上传文件大小限制
Nginx和php默认不支持上传过大的文件.假如我们要求上传的文件大小为20M,默认配置就不允许上传了. 下面我们更改nginx和php配置,设定上传的限制为20M. Nginx配置更改 如果上传文件 ...
- Android.mk简介<转>
文章参照:http://blog.sina.com.cn/s/blog_67d8d7060100q8un.html Android.mk文件是GNU Makefile的一小部分,它用来对Android ...