angular2 组件之间通讯-使用服务通讯模式 2016.10.27 基于正式版ng2
工作中用到ng2的组件通讯 奈何官方文档言简意赅 没说明白 自己搞明白后 整理后分享下
rxjs 不懂的看这篇文章 讲很详细 http://www.open-open.com/lib/view/open1462525661610.html
以下是服务代码
import { Injectable } from '@angular/core';
import {Subject}from"rxjs/Subject";
@Injectable()
export class CService {
private outputTitle = new Subject();
//订阅
//声明变量 订阅Observer
output$ = this.outputTitle.asObservable(); //推送 调用next方法 Subject会向所有已经在其上注册的Observer多路推送 theValue UpData(message:any) {
this.outputTitle.next(message);
}
}
以下是子组件中的代码 节选
import { Component, OnInit ,Input,
import {CService}from"../shared/corresponded.service";//引入服务 单例模式 @Component({
//这里一定不要注册服务提供商 也就是不要在里面声明
providers: []//不需要提供CService服务
})
export class HomePostsComponent implements OnInit { constructor(
//与父组件的cs服务实例相同 是同一个实例
public _CService:CService) {
} //自己业务需要在初始化的时候调用 所以就放在这里了 \
ngOnInit() {
//发送消息
//updata调用next方法 推送数据
this._CService.UpData({title:"铃铛宠物",ico:""});
} }
以下是父组件代码 节选
import { Component,OnInit,AfterViewChecked,AfterViewInit} from '@angular/core';
//引入服务
import {CService}from"./shared/corresponded.service";
@Component({
//服务供应商 只在父组件使用 子组件不需要
providers: [CService]
})
export class AppComponent implements OnInit,AfterViewChecked,AfterViewInit {
//此处cs 实例和子组件的实例是一样的 都是同一个实例
constructor(private CS:CService) { } //在ngAfterViewChecked每次做完组件视图和子视图的变更检测之后调用。 会执行多次
//ngAfterViewInit初始化完组件视图及其子视图之后调用。只调用一次
//订阅组件信息 只写了接收 没写发送 道理是一样的
ngAfterViewInit() {
let that = this;
console.log("ngAfterViewInit");
this.CS.output$.subscribe((value:any)=> {
console.log(value);
that.title = value.title;
that.ico = value.ico;
})
} }
整个通信流程 核心就是单例 只有一个服务的实例 目前就这么多了 不明白的留言交流吧
angular2 组件之间通讯-使用服务通讯模式 2016.10.27 基于正式版ng2的更多相关文章
- angular组件之间的通讯
组件通讯,意在不同的指令和组件之间共享信息.如何在两个多个组件之间共享信息呢. 最近在项目上,组件跟组件之间可能是父子关系,兄弟关系,爷孙关系都有.....我也找找了很多关于组件之间通讯的方法,不同的 ...
- Angular 发布订阅模式实现不同组件之间通讯
在我们项目中要实现不同组件之间通讯,Angular的@Input和@Output只能实现有父子组件的限制,如果是复杂跨组件实现不同组件可以通过共享变量的方式实现,比如这个博客的思路:https://w ...
- Android--Otto事件总线 -- 组件之间通讯框架使用 --模式解析
前言:Otto事件总线 -- 组件之间通讯框架 对于之前的情况activity之间或者fragment之间等跳转传值一般都是用bundle.intent等,从activityA --- activit ...
- Angular组件之间通讯
组件之间会有下列3种关系: 1. 父子关系 2. 兄弟关系 3. 没有直接关系 通常采用下列方式处理(某些方式是框架特有)组件间的通讯,如下: 1父子组件之间的交互(@Input/@Output/模板 ...
- Angular10 组件之间的通讯
1 父组件和子组件之间的通讯 2 利用中间组件实现两个组件之间的通讯 3 利用服务实现两个组件之间的通讯 2017年8月26日20:09:13 待更新... 1 组件之间的关系图 1.1 父子关系 1 ...
- 组件之间的通讯:vuex状态管理,state,getters,mutations,actons的简单使用(一)
之前的文章中讲过,组件之间的通讯我们可以用$children.$parent.$refs.props.data... 但问题来了,假如项目特别大,组件之间的通讯可能会变得十分复杂... 这个时候了我们 ...
- vue.js组件之间通讯的数据双向绑定----父亲把数据传递给儿子,儿子更改数据后,重新发送给父亲,父亲数据更改后,属性会重新发送个儿子,儿子刷新新数据
vue组件是相互独立的,如果要交互通讯,这时候,就需要组件之间数据互通了 往常我们讲的都是数据传递,子传父,父传子,都没有说子和父,父与子之间的数据互通 父亲传递给儿子数据,儿子触发一个父亲方法,将最 ...
- vue.js组件之间的通讯-----父亲向儿子传递数据,儿子接收父亲的数据
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 分布式服务通讯框架XXL-RPC
<分布式服务通讯框架XXL-RPC> 一.简介 1.1 概述 XXL-RPC 是一个分布式服务通讯框架,提供稳定高性能的RPC远程服务调用功能.现已开放源代码,开箱即用. 1.2 特 ...
随机推荐
- HDU-1701 Binary Tree Traversals
http://acm.hdu.edu.cn/showproblem.php?pid=1710 已知先序和中序遍历,求后序遍历二叉树. 思路:先递归建树的过程,后后序遍历. Binary Tree Tr ...
- [转]SVN的trunk branch tag
Subversion有一个很标准的目录结构,是这样的.比如项目是proj,svn地址为svn://proj/,那么标准的svn布局是 svn://proj/|+-trunk+-branches+-ta ...
- Bzoj 1982: [Spoj 2021]Moving Pebbles 博弈论
1982: [Spoj 2021]Moving Pebbles Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 130 Solved: 88[Submi ...
- 《使用wxWidgets进行跨平台程序开发》chap09——布局一个对话框
///////////////////////////////////////////////////////////////////////////// // Name: personalrecor ...
- pac 文件使用到的javascript函数
下面是可用于FindProxyForURL()函数体中的条件函数: 基于主机名的函数: isPlainHostName() dnsDomainIs() localHostOrDomainIs() is ...
- UIView frame, bounds and center
http://stackoverflow.com/questions/5361369/uiview-frame-bounds-and-center Since the question I asked ...
- 【杭州(含嘉兴,绍兴,金华,湖州,义乌)】Uber优步司机奖励政策(2月1日~2月7日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- hdoj 5137 How Many Maos Does the Guanxi Worth【最短路枚举+删边】
How Many Maos Does the Guanxi Worth Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 512000/5 ...
- Morris Traversal 二叉树遍历。
那天做了个SWAP NODE的题,要求constant space,不得不Morris Traversal. 稍微研究了一下,真正意义上的O(1)space对二叉树进行遍历.好像是1979年的算法. ...
- SqlCommand对象
SqlCommand对象以及如何使用它与数据库交互 1.什么是command对象2.如何使用ExecuteReader方法查询数据3.如何使用ExecuteNonQuery方法插入和删除对象4.如何使 ...