写点什么

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

评论

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

代码实验01:main 方法可以继承吗?

Seven的代码实验室

阿里二面 main方法

Timsort - 混合、稳定、高效的排序算法

Geek漫游指南

算法 排序 插入排序 归并排序 Timosrt

Docker Rootless 在非特权模式下运行 Docker

Se7en

盘点 2021|海军的 2021年终总结, 跳槽后,我收获了什么

程序员海军

年终总结 2021年度技术盘点与展望

追热点

张老蔫

28天写作

Golang中的runtime包

liuzhen007

28天写作 12月日更

56 K8S之Kubernetes监控

穿过生命散发芬芳

k8s 28天写作 12月日更

我在《Effective STL》中的找到的知识点

SkyFire

c++ stl

关于分布式系统共识的思考

yuexin_tech

分布式

写博客的感想

为自己带盐

28天写作 12月日更

利用 Github Pages 和 Hugo 快速搭建免费的个人网站

xcbeyond

GitHub Pages Hugo 28天写作 12月日更

大公司生存的几把斧

圣迪

人才 组织 战略 大公司 技术委员会

人生的意义要不断探索实现

mtfelix

28天写作

Dubbo 框架学习笔记十三

风翱

dubbo 12月日更

设计千万级学生管理系统的考试试卷存储方案

ren

#架构实战营

模块三作业

浮生若梦

「架构实战营」

【CSS 学习总结】第六篇 - CSS 布局概述

Brave

CSS 12月日更

Tinder系统架构

俞凡

架构 大厂实践 Tinder

GraphQL与REST:两种API架构

devpoint

graphql REST API 12月日更

没事-2022继续做梦

将军-技术演讲力教练

重载(overload) 和重写(override) 的区别?重载的方法能否根据返回类型进行区分?

海拥(haiyong.site)

28天写作 12月日更

语音信号的时域分析

轻口味

28天写作 12月日更

学生管理系统详细架构设计

swallowluo

架构实战营 「架构实战营」

Springboot国际化消息和源码解读

DoneSpeak

Java spring springboot

.NET6新东西---TryGetNonEnumeratedCount

喵叔

28天写作 12月日更

跟着动画学 Go 数据结构之Go 实现栈

宇宙之一粟

Go 语言 12月日更

微服务划分的思考

无心水

微服务 微服务架构 SpringCloud 注册中心 微服务划分

Reactor模式和Java NIO

Java·课代表

Java reactor 设计模式 网络编程 nio

发射、加速与着陆:一群科学家的奥林帕斯探索之旅

脑极体

HarmonyOS(鸿蒙)——滑动事件

李子捌

28天写作 21天挑战 12月日更

介绍一些拉新的具体方案

石云升

AARRR 28天写作 产品增长 12月日更

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