写点什么

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

评论

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

第一周作业

极客大学 极客大学架构师训练营

智慧公安大数据分析平台开发解决方案

t13823115967

大数据 智慧公安

Windows下常用软件配置

jiangling500

windows 软件配置

架构师系列之8:python网站压测工具

桃花原记

《操作系统概述》-第六版

计算机与AI

操作系统

Week 11 work

黄立

系统安全与高可用

天天向上

第二周 框架设计 作业一 「架构师训练营 3 期」

胡云飞

极客大学架构师训练营 框架设计

深入了解Linux共享内存及函数详解(含编程示例)

ShenDu_Linux

Linux 程序员 内存 进程

区块链中的保险行业

13828808769

区块链技术应用开发 保险理赔

第二周作业

Geek_b9053c

依赖倒置原则

搞懂这篇文章,关于IO复用的问题就信手拈来了

程序员小灰

Linux 后台开发 io epoll Linux服务器开发

两年竞业禁止、没有赔偿的CTO | 法庭上的CTO(1)

赵新龙

CTO 竞业禁止 试用期

公安警务大数据可视化平台开发建设

t13823115967

大数据 智慧公安

vue高级进阶系列——用typescript玩转vue和vuex

徐小夕

Java vue.js Vue 大前端

区块链如何解决互联网为基础的广告困境?

CECBC

区块链 互联网广告

Spring 源码学习 06:AnnotatedBeanDefinitionReader

程序员小航

Java spring 源码 源码阅读

几个大厂的研发类面试题你知道多少?(C/C++工程师方向)

linux大本营

c++ Linux 后台开发 架构师

京东云的云原生理念及Serverless最佳实践

lidaobing

可参考才是有价值的,架构设计的技改之路从来都不容易

互联网应用架构

架构设计

Defi系统APP开发|Defi软件开发

系统开发

架构师训练营第十一周

我是谁

极客大学架构师训练营

架构师训练营第二周课后作业

万有引力

腾讯 WXG 后台开发工程师对 MySQL 索引知识点总结

Java架构师迁哥

依赖倒置原则以及接口隔离方式实现接口设计

我们新四军不拿群众一针一线

Kafka 和 RocketMQ 之性能对比

中间件兴趣圈

kafka 源码分析 RocketMQ 中间件 性能分析

Defi挖矿软件系统开发|Defi挖矿APP开发

系统开发

保障系统稳定高可用的方案

天天向上

极客大学架构师训练营

吴桐:2021年中国区块链产业发展的六大趋势

CECBC

区块链 新基建

架构师训练营第 11 周学习总结

netspecial

极客大学架构师训练营

Spring视图解析流程

无用且垂死的星辰

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