组件间的数据传递方式有很多,这里只介绍几种常用场景下的数据传递方式,以方便初学者学习理解一点组件间数据传递的知识,若有不准确之处,欢迎指正,大神请轻喷,废话不多说了,开整!
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.ts
import { 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.ts
import { 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
更多内容推荐
课件资料
2023-09-27
数据报告 | 新冠疫情对美国民众消费行为的影响
一文快速了解疫情对美国民众消费行为的影响
2022-11-22
8. ChatGPT 来临,架构师如何应对挑战
2023-09-26
【愚公系列】2022 年 11 月 微信小程序 -app.json 配置属性之 subpackages 和 preloadRule
分包的功能主要是实现小程序按需加载,进入分包页面才会进行分包的加载。
2022-11-13
抢先预约 | 阿里云无影云应用线上发布会预约开启
无影云应用即将重磅发布,精彩不容错过!
2022-05-16
内行,阿里大牛离职带出内部“高并发系统设计”学习手册
我们知道,高并发代表着大流量,高并发系统设计的魅力就在于我们能够凭借自己的聪明才智设计巧妙的方案,从而抵抗巨大流量的冲击,带给用户更好的使用体验。这些方案好似能操纵流量,让流量更加平稳得被系统中的服务和组件处理。
2022-07-12
Qt | Qt 的动画框架和类
动画框架的父类是QAbstractAnimation类,QVariantAnimation和QAnimationGroup类均继承自QAbstractAnimation类。QPropertyAnimation类继承自QVariantAnimation类,因其将QObject的属性和QPropertyAnimation相连接,所以可以使用动画效果。
2022-10-11
下载软件哪个好?
下载软件哪个好?
2022-04-20
开奖啦!看看 9 月月更获奖名单有没有你?
9月月更获奖结果公布啦~速速领奖
2022-10-14
第 12 讲 锁定目标,制定计划
2023-10-17
6. 元数据:总结与面试要点
2023-09-26
如何使用查看器筛选、搜索功能进行数据定位?
观测云的查看器,是一个功能全面且强大的数据查看分析工具。其提供多种搜索和筛选方式,并支持以组合的方式搭配使用获取最终数据结果。本文将从实际场景出发,讲述如何通过查看器的搜索与筛选功能,帮助用户快速、精准地检索数据,定位故障问题。
2023-11-01
Spring 系列之 IOC 容器的实例化过程一
上一篇文章我们讲解了spring容器中IOC的容器结构,IOC容器总共有:1.ResourceLoader(资源加载组件)2.Resource(资源描述组件)3.BeanDefinitionReader(bean构建组件)4.BeanDefinition(元数据组件)5.BeanRegister(Bean注册组件)6.BeanFactory(bean容
2023-05-29
Qt | 控件之 QComboBox
QComboBox组件的使用。
2022-07-17
将博客搬至 CSDN
将博客搬至CSDN将博客搬至CSDN将博客搬至CSDN将博客搬至CSDN将博客搬至CSDN将博客搬至CSDN将博客搬至CSDN将博客搬至CSDN
2022-04-24
11. 懂战略——如何拆解战略 3
2023-10-17
C#入门系列 (二十一) -- 面向对象之继承
继承、封装和多态性是面向对象编程的三个主要特性。
2022-06-21
vue 组件通信方式有哪些?
父组件通过props的方式向子组件传递数据,而通过$emit 子组件可以向父组件通信。
2023-05-19
OpenHarmony 装饰指定自定义组件:@BuilderParam 装饰器
当开发者创建了自定义组件,并想对该组件添加特定功能时,例如在自定义组件中添加一个点击跳转操作。若直接在组件内嵌入事件方法,将会导致所有引入该自定义组件的地方均增加了该功能。为解决此问题,ArkUI引入了@BuilderParam装饰器,@BuilderParam用来装饰
2023-09-27
2. 倒排索引(下)
2023-09-28
推荐阅读
新网的机房写的是 BGP 链路,什么是 BGP 链路啊?
2023-11-18
第 30 期 | GPTSecurity 周报
2023-12-05
【鸿蒙生态学堂 _03】应用程序框架基础
答疑课堂(二)|第二章 Rust 进阶篇思考题答案
2023-12-08
35. 提取身份证中的出生日期及性别信息
2023-10-17
第 18 节 理解优势:客户认为的优势才是优势
2023-10-17
《HarmonyOS 第一课 _04》应用程序框架基础
电子书
大厂实战PPT下载
换一换 李腾飞 | 字节跳动 后端研发工程师
裴斐 | 网易 高级技术专家,资深架构师
陈朝钢(摩净) | 蚂蚁集团 高级数据技术专家
评论