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 特 ...
随机推荐
- python 中 time 模块 格式化 format
%y 两位数的年份表示(00-99)%Y 四位数的年份表示(000-9999)%m 月份(01-12)%d 月内中的一天(0-31)%H 24小时制小时数(0-23)%I 12小时制小时数(01-12 ...
- SQL 判断字段中指定字符出现的次数
原文地址:SQL 判断字段中指定字符出现的次数 原理:将指定字符转换为空,原长度减去转换后的长度就是指定字符的次数. 在做数据处理时遇到一个SQL操作的问题就是有一列关键词字段,字段中包含各种乱七八糟 ...
- RedHat/CentOS系统信息查看命令大全
系统# uname -a # 查看内核/操作系统/CPU信息# head -n 1 /etc/issue # 查看操作系统版本# cat /proc/cpuinfo ...
- 白帽子讲Web安全2.pdf
XSS构造技巧 利用字符编码: var redirectUrl="\";alert(/XSS/);"; 本身没有XSS漏洞,但由于返回页面是GBK/GB2312编码的“% ...
- windows下redis的安装配置和php扩展使用phpredis
1. 首先安装先下载redis数据库 下载地址: http://code.google.com/p/servicestack/wiki/RedisWindowsDownload 目前是2.02 ...
- hdoj 1896 Stones【优先队列】
Stones Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Subm ...
- Hadoop: the definitive guide 第三版 拾遗 第十二章 之Hive初步
Hive简介 Hive是建立在 Hadoop 上的数据仓库基础构架.它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储.查询和分析存储在 Hadoop 中的大规模数据的机制 ...
- Intellij 中的git操作 转!
http://blog.csdn.net/lovesummerforever/article/details/50032937 Git原理以后会分章节介绍,本次主要说一下intellij怎样操作git ...
- 关于PHP开发的9条建议
这篇文章主要介绍了关于PHP开发的9条建议,都是个人的一些经验总结,有需要的小伙伴可以参考下. 本文只是个人从实际开发经验中总结的一些东西,并不是什么名言警句,写出来有两个目的:一是时刻提醒自己要按照 ...
- hdu 寒冰王座
呵呵,过了这么久还来刷水题实在是不好意思.本题属于全然背包,就是一模板题.只是窝还是要来水一下.嘻嘻 寒冰王座 Time Limit: 2000/1000 MS (Java/Others) Me ...