Angular 8 组件间数据共享

父子组件数据传递

  • 父级向子级传递对象: @Input

例如:一个下拉框的列表数据 options 来自父组件。

子组件代码:

import { Component, Input } from ‘@angular/core‘;

@Input() options: Array<string>;

在子组件中,可以自由使用 options 对象。

在 js 中通过 this.options 去访问列表数据

在 html 中 直接用 options 去访问

父组件中使用

子组件一般直接在父组件的 html 中通过元素的形式添加进来,如

<app-search [options]="StatusStr"> </app-search>

options 是在子组件添加的对外属性,[options] 表示通过数据模型绑定到子组件的 options 属性上。StatusStr 是父组件(js文件)中定义的一个数据对象。

这样就实现了将父组件的数据传递给了子组件。

 

  • 子组件向父组件触发事件 @Output, EventEmitter

子组件代码:

import { Component, Output, EventEmitter } from ‘@angular/core‘;

@Output() search = new EventEmitter<string>();

onSearch(keycode, val) {

if (keycode == 13) {

this.search.emit(val);

}

}

 父组件代码:

HTML:

<app-search (search)="searchUsers($event)"></app-search>

JS:

searchUsers(val: string) {

this.searchKey = val;

this.getUsers(val);

}

子组件中使用 @output + EventEmitter 定义一个可以对外的带参事件,并在子组件内部的适当时机去触发这个事件 this.search.emit(val),

父组件在使用子组件时,可以将子组件中定义的事件绑定到自己的内部函数。

子组件通过 @output 定义的event, 使用上等同于html 基本元素的 click 事件,都可以通过 (eventname)的形式进行事件绑定。

同级组件数据传递

没有包含关系的两个组件,如果想进行数据传递,根据业务要求的不同,可以自行选择子父父子参数续传,或者是通过 service。

这里介绍通过 service 实现两个组件间的事件触发及参数传递:

  • 创建一个 service 专门用作各种情况下的 service 数据传递

////selected report

private selectedReportSource = new Subject<any>();

SelectedReport$ = this.selectedReportSource.asObservable();

SelecteReport(index: any) {

this.selectedReportSource.next(index);

}

selectedReportSource 用来保存选中的 report 唯一标志,SelectedReport$ 是一个选中 report 唯一标志的可订阅对象, SelecteReport()方法用来修改选中的 report

  • 在触发改变的组件内,调用数据改变方法

import { AllService } from "../../../services/all.service";

this.all.share.SelecteReport(tabIndex);

import 定义数据服务的对象,通过服务方法改变选中的 report

  • 在接收数据改变的组件内,监听 subject 对象

import { Component, OnInit, OnDestroy } from ‘@angular/core‘;

import { AllService } from "../../../services/all.service";

import { Subscription } from ‘rxjs‘;

export class ReportsComponent implements OnInit, OnDestroy {

subscription_selectReport: Subscription;

ngOnInit() {

this.subscription_selectReport = this.all.share.SelectedReport$.subscribe((x: number) => {

this.ActiveTab = x;

});

}

ngOnDestroy() {

this.subscription_selectReport.unsubscribe();

}

}

第一,引入数据服务 AllService

第二,添加组件的 OnDestroy, Subscription  引用

第三,定义一个 Subscription 对象,并注册监听 SelectedReport$.subscribe(),

第四,在 ngOnDestroy 中注销监听(避免内存泄漏)

注意:

如果不需要不同组件间事件的触发,就不需要注册监听,直接在数据服务中提供一个数据访问方法,由数据消费组件调用即可

原文地址:https://www.cnblogs.com/crdanding/p/12026965.html

时间: 2024-11-09 10:00:17

Angular 8 组件间数据共享的相关文章

android组件间共享数据的常用方法

使用Intent在激活组件的时候携带数据,以进行数据的传递 使用广播进行组件间数据的伟递 使用外部存储(sharedPreference,文件,数据库,网络)进行组件间数据共享 使用Static静态成员进行数据传递 Application Context进行程序内组件间数据共享

原创-angularjs2不同组件间的通信

AngualrJs2官方方法是以@Input,@Output来实现组件间的相互传值,而且组件之间必须父子关系,下面给大家提供一个简单的方法,实现组件间的传值,不仅仅是父子组件,跨模块的组件也可以实现传值 /** *1.定义一个服务,作为传递参数的媒介 */ @Injectable() export class PrepService{ //定义一个属性,作为组件之间的传递参数,也可以是一个对象或方法 profileInfo: any; } /** *2.传递参数的组件,我这边简单演示,直接就在构

Android组件间通信——EventBus

在Android开发中,组件间通信一直是一个不可忽视的部分.当然,组件之间的通信有很多种方式可以选择,本文就利用EventBus通信的方式进行论述. EventBus是一个第三方框架,它的简单使用分为如下几步: 1. 下载框架源码,并导入工程中. 下载地址:https://github.com/greenrobot/EventBus 如果需要看如何导入并依赖工程,请转到另一篇博文:<Eclipse导入所依赖的Android项目> 2. 定义事件类,并广播事件 例如下面这个自定义事件类Messa

【Vue】浅谈Vue不同场景下组件间的数据交流

浅谈Vue不同场景下组件间的数据“交流” Vue的官方文档可以说是很详细了.在我看来,它和react等其他框架文档一样,讲述的方式的更多的是“方法论”,而不是“场景论”,这也就导致了:我们在阅读完文档许多遍后,写起代码还是不免感到有许多困惑,因为我们不知道其中一些知识点的运用场景.这就是我写这篇文章的目的,探讨不同场景下组件间的数据“交流”的Vue实现 父子组件间的数据交流 父子组件间的数据交流可分为两种: 1.父组件传递数据给子组件 2.子组件传递数据给父组件 父组件传递数据给子组件——pro

Android组件间的相互调用

我们研究两个问题,1.Service如何通过Broadcaster更改activity的一个TextView.(研究这个问题,考虑到Service从服务器端获得消息之后,将msg返回给activity) 2.Activity如何通过Binder调用Service的一个方法.(研究这个问题,考虑到与服务器端交互的动作,打包至Service,Activity只呈现界面,调用Service的方法) 结构图见如下:效果图如下:点击“start service”按钮,启动Service,然后更改Activ

Vue2.0组件间数据传递

Vue1.0组件间传递 使用$on()监听事件: 使用$emit()在它上面触发事件: 使用$dispatch()派发事件,事件沿着父链冒泡: 使用$broadcast()广播事件,事件向下传导给所有的后代 Vue2.0后$dispatch(),$broadcast()被弃用,见https://cn.vuejs.org/v2/guide/migration.html#dispatch-和-broadcast-替换 1,父组件向子组件传递场景:Father上一个输入框,根据输入传递到Child组件

第四节:Vue表单标签和组件的基本用法,父子组件间的通信

vue表单标签和组件的基本用法,父子组件间的通信,直接看例子吧. <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="vue.js"></script> </head> <body> <div id="app"&

React独立组件间通信联动

React是现在主流的高效的前端框架,其官方文档 http://reactjs.cn/react/docs/getting-started.html 在介绍组件间通信时只给出了父子组件间通信的方法,而没有给出独立组件间通信的解决方案.这里我介绍一种不错的实现方式——signals. 第一步,我们要建立两个简单的react组件——一个进度条和一个输入框. 组件——进度条: var ProcessBar=React.createClass({ getInitialState:function(){

React 组件间通讯

React 组件间通讯 说 React 组件间通讯之前,我们先来讨论一下 React 组件究竟有多少种层级间的关系.假设我们开发的项目是一个纯 React 的项目,那我们项目应该有如下类似的关系: 父子:Parent 与 Child_1.Child_2.Child_1_1.Child_1_2.Child_2_1 兄弟:Child_1 与 Child_2.Child_1_1 与 Child_2.etc. 针对这些关系,我们将来好好讨论一下这些关系间的通讯方式. (在 React 中,React 组