写点什么

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:54744

评论

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

自然语言处理_AI文本翻译

DS小龙哥

三周年连更

Angular 服务器端渲染两个相关的 SERVER_REQUEST_URL 和 SERVER_REQUEST_ORIGIN

汪子熙

前端开发 angular 三周年连更

OpenHarmony应用TS&JS编程指南

鸿蒙之旅

OpenHarmony 三周年连更

Go语言开发小技巧&易错点100例(七)

闫同学

三周年连更

2023-05-01:给你一个整数 n , 请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...] 中找出并返回第 n 位上的数字。 1 <= n <=

福大大架构师每日一题

golang 算法 rust 福大大

Haproxy进阶管理:命令行控制后端节点上下线

乌龟哥哥

三周年连更

Mac M1 8G丐版尝试本地部署Stable Diffusion

IT蜗壳-Tango

三周年连更

2023-05-02:如果一个正整数每一个数位都是 互不相同 的,我们称它是 特殊整数 。 给你一个正整数 n ,请你返回区间 [1, n] 之间特殊整数的数目。 输入:n = 20。 输出:19。

福大大架构师每日一题

Go 算法 rust 福大大

分布式事务的21种武器 - 3

俞凡

架构 云原生

Python语法基础快速回顾

timerring

Python

通过ChatGPT来写论文

石云升

AIGC ChatGPT 三周年连更

Java Collection与Map详解

timerring

Java

如何用 python 设计一个兑奖程序?

海拥(haiyong.site)

三周年连更

ChatGPT 将如何影响编程行业?程序员是被将被替代? | 社区征文

格斗家不爱在外太空沉思

ChatGPT 三周年征文

区块链技术是什么?比特币又是什么?硕士是区块链研究方向,就业怎么办?

千与编程

区块链+ 研读版

Matlab凸优化算法

袁袁袁袁满

三周年连更

Mac M1 安装SD(上)

IT蜗壳-Tango

三周年连更

高级视频编码器性能对比(H265、VP9、AV1)

轻口味

音视频 视频编解码 三周年连更

为什么有些前端一直用 div 当按钮,而不是用 button?

海拥(haiyong.site)

三周年连更

Go语言开发小技巧&易错点100例(六)

闫同学

三周年连更

Java HashMap 的常用方法,Java工程师必知!

Java架构历程

Java hashmap 三周年连更

【Python实战】Python采集情感音频

BROKEN

三周年连更

ssh 连接Linux确实很安全,这6种身份验证方法很强!

wljslmz

Linux SSH 三周年连更

徒手体验卷积运算的全过程 | 社区征文

迷彩

Python 深度学习 卷积 三周年征文 三周年连更

手撕代码系列(四)

Immerse

JavaScript 面试 前端面试题 ES6基础知识点总结

数据湖技术Iceberg和Hudi的比较

漫长的白日梦

数据湖 iceberg Hudi

python采集评论区内容

BROKEN

三周年连更

Linux 文件与目录管理

鸿蒙之旅

Linux 三周年连更

云安全技术管理

阿泽🧸

云安全 三周年连更

Matlab实现Non-Local Means算法

袁袁袁袁满

三周年连更

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