写点什么

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

评论

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

可爱的程序员哟,你忘掉的是这堆Java锁呢?还是这把死锁呢

Java 程序员 后端

可视化编程已经能取代高级语言了吗?,docker高级面试题

Java 程序员 后端

史上最全 SpringCloud入门教程,从零开始带你深入♂学习(十

Java 程序员 后端

史上最全141道大数据面试题:Redis+Linux,mongodb面试

Java 程序员 后端

双非本科毕业的我,为何能在金九银十期间斩获京东、字节

Java 程序员 后端

史上最全Spring教程,从零开始带你深入♂学习(二(1),深入实践springbootpdf百度云

Java 程序员 后端

史上最全Spring教程,从零开始带你深入♂学习(二,java快速排序原理

Java 程序员 后端

同事问我MySQL怎么递归查询,我懵逼了(1),阿里java技术专家评级

Java 程序员 后端

同样是程序员,本科学历凭什么就比专科学历更吃香?,mybatis常见面试题

Java 程序员 后端

五面阿里、三面美团、四面字节跳动,最终拿offer入职字节!

程序员 数据结构 面试 算法

双非本科怎么了,照样拿到阿里 offer! 分享阿里技术四面 + 交叉面

Java 程序员 后端

史上最全499道Java面试题:JVM+分布式,Kafka的精髓全写这本“限量笔记”里了

Java 程序员 后端

史上最全Java8日期时间工具类(1),mongodb索引原理

Java 程序员 后端

史上最全SpringBoot教程,从零开始带你深入♂学习(九,大厂Java面试真题精选

Java 程序员 后端

听音乐不过瘾?自制一个音乐播放器!,java程序设计基础知识点第七章

Java 程序员 后端

吹爆!阿里高工甩出内部强推Redis全栈笔记,Github已获赞78

Java 程序员 后端

反正闲的也是闲的,搞点Redis面试真题,再也不担心挂在Redis上

Java 程序员 后端

史上最全Java8日期时间工具类,史上超级详细

Java 程序员 后端

同事问我MySQL怎么递归查询,我懵逼了,java面试简历百度云

Java 程序员 后端

怎样实现跨微服务的数据查询?

俞凡

架构 微服务

史上最全SpringBoot教程,从零开始带你深入♂学习(十五

Java 后端

吃透阿里大佬整理的Java面试要点手册,成功五面进阿里(二本学历

Java 程序员 后端

吊打面试官!Java基础(面向对象,java入门自学书籍推荐

Java 程序员 后端

上线直接霸榜!阿里内网流传P8大牛的“满级”分布式架构笔记

Java 编程 程序员 架构

又是一年金九银十,不明白JVM虚拟机还怎么面试-,kafka部署架构

Java 程序员 后端

听我讲完redo log、binlog原理,面试官老脸一红,rabbitmq集群同步原理

Java 程序员 后端

听说Lombok的@Builder不好使?快来试试这个,rocketmq原理面试题

Java 程序员 后端

史上最全Mybatis框架入门教程,从零开始带你深入♂学习(三

Java 程序员 后端

史上最全Redis数据库入门教程,从零开始带你深入♂学习(一

Java 程序员 后端

同事临走时,给了我这份多线程and高并发(面试题,小米java面试几轮

Java 程序员 后端

同程旅行基于 RocketMQ 高可用架构实践,mysql破解版百度云

Java 程序员 后端

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