写点什么

Angular2 组件间的数据传递,这几种姿势你知道吗(一)

  • 2020-01-07
  • 本文字数:1167 字

    阅读完需:约 4 分钟

Angular2组件间的数据传递,这几种姿势你知道吗(一)

组件间的数据传递方式有很多,这里只介绍几种常用场景下的数据传递方式,以方便初学者学习理解一点组件间数据传递的知识,若有不准确之处,欢迎指正,大神请轻喷,废话不多说了,开整!

1. 父组件到子组件的数据传递

父组件向子组件数据传递的最简便的方式是通过子组件的输入属性流入子组件,并在子组件中完成拦截接收,从而实现由外到内的数据传递(@Input 输入属性在这里就不多做介绍,它在父到子组件的作用,如下图,像探针一样获取数据并传递到子组件内部)


下面我们先看下示例:



父组件准备


首先在父组件(app-root)中定义需要传递的数据如示例中的 showNum ,然后将数据与子组件的 value 进行绑定,如下代码所示


//app.component.html
<div style="text-align:center" > <h1> Welcome to {{ title }}! <br/><button (click)="children.fn()">通过#children获取子组件的方法</button><br/><button (click)="onclick()">通过@viewChild获取子组件的方法</button><content #children></content> <square [value]="showNum"></square> <broad [options]="broadNum" (onCollect)='collectNum($event)'></broad> </h1></div>
//app.component.tsimport { Component,ViewChild } from '@angular/core';import { ContentComponent } from './component/content.component/content.component';@Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css']})export class AppComponent { @ViewChild(ContentComponent) child: ContentComponent; title = 'app'; broadNum = [0,1,2,3,4,5,6,7,8]; showNum = '1'; collectNum(num){ this.showNum = num; } onclick(){ this.child.fn(); }}
复制代码

子组件接收

然后在子组件中通过 @input 装饰器来获取 value,然后在组件数据 change 回调中将 value 值更新到子组件的视图,完成一次父组件到子组件的数据传递(说明:本示例中使用 ngOnChanges 监听数据变化更新视图,你也可以使用 setter 拦截输入属性实现数据的拦截)


//square.component.html<button class="square"> {{square.value}}</button>
// square.component.tsimport { Component,Input,OnInit,OnChanges,SimpleChanges} from '@angular/core';@Component({ selector: 'square', templateUrl: './square.component.html', styleUrls: ['./square.component.css']})export class SquareComponent implements OnInit, OnChanges{ square:object = { value:'12' }; @Input() value:string; ngOnChanges(changes: SimpleChanges) { // 外部修改show属性的处理,初始定义在ngOnInit中处理 if (changes['value']) { this.square.value = this.value } }}
复制代码


本转载自 Think 体验设计公众号。


原文链接:https://mp.weixin.qq.com/s/QBYWSVi0DDKKNf1GLC5sTw


2020-01-07 17:54769

评论

发布
暂无评论
发现更多内容

模块一作业

joak

拆分电商系统为微服务

哈喽

「架构实战营」

企评家 | 如何评价企评家企业成长性评价系统?

企评家

一文读懂Move2Earn项目——MOVE

西柚子

Vue数据响应Object.defineProperty

空城机

vue.js 5月月更

Apache Knox SSO 及在移动云 EMR 中的实践

移动云大数据

MapReduce服务

BSC币安NFT链游系统DAPP开发技术

薇電13242772558

智能合约 NFT

Redis「6」实现消息队列

Samson

学习笔记 Redis 核心技术与实战 5月月更

Java 8 开始新增的 Optional 类 - 创建 Optional 对象

HoneyMoose

总工程师直播解析:隐私计算是什么,都有哪些核心技术和典型应用场景? | 第17 期

OpenAnolis小助手

隐私计算 龙蜥社区 sig 龙蜥大讲堂 海泰方圆

企评家 | 浙江永贵电器股份有限公司性评价简介

企评家

前端学习笔记(一):css学习笔记

恒山其若陋兮

5月月更

【活动预告】云上数字工厂与中小企业数字化转型创新论坛

阿里云弹性计算

数字化转型 中小企业 云盒

【科普】如果程序员穿越到古代当皇帝,会发生什么?

阿里巴巴云原生

阿里云 云原生 消息队列 EventBridge

焱融看|2022 年存储自动化的 5 大趋势

焱融科技

云计算 分布式 云原生 高性能 文件存储

PolarDB-X 源码解读:DDL的一生(上)

阿里云数据库开源

数据库 阿里云 开源 分布式 polarDB

基于SVN的CICD调研方案

ZuccRoger

5月月更

看透说破:客户服务首解率(FCR)的迷思

龙国富

客户体验 首解率

一文读懂Move2Earn项目——MOVE

小哈区块

[数据分析实践]-Image Matching-2DTo3D-1

浩波的笔记

人工智能 机器学习 数据分析

DevOps 向业务进阶,BizDevOps 要如何实现?

飞算JavaAI开发助手

蚂蚁集团 Service Mesh 进展回顾与展望

SOFAStack

架构 开发者 API Service Mesh 服务网格

AliAGC 自动增益控制算法:解决复杂场景下的音量问题

阿里云CloudImagine

算法 3A 音频

开源之夏IoTDB项目宣讲会落幕,你关心的问题这里都有

Apache IoTDB

时序数据库 Apache IoTDB 开源之夏

国内首批|观测云获得信通院 “可观测性平台技术能力”最高级认证!

观测云

可观测性 可观测

TiDB 冷热存储分离解决方案

TiDB 社区干货传送门

企评家企业大数据平台,助力企业刻画企业成长性画像

企评家

企评家 | 梅花生物科技集团股份有限公司成长性评价简介

企评家

【LeetCode】验证外星语词典Java题解

Albert

LeetCode 5月月更

难对齐、难保障、难管理?一文了解字节跳动如何解决数据SLA治理难题

字节跳动数据平台

字节跳动 数据治理 SLA 数据研发

【刷题第 11 天】26. 删除有序数组中的重复项

白日梦

5月月更

Angular2组件间的数据传递,这几种姿势你知道吗(一)_文化 & 方法_Think体验设计_InfoQ精选文章