angular2 组件之间通过service互相传递的实例


Posted in Javascript onSeptember 30, 2018

母组件传值给子组件

母组件通过service传值给子组件,很简单,声明一个service

@Injectable()
export class ToolbarTitleService {
 title:string;
}

然后在母组件中依赖注入

@Component({
 selector: 'admin',
 templateUrl: './admin.component.html',
 styleUrls: ['./admin.component.scss'],
 providers: [ToolbarTitleService],
})

子组件中直接声明即可使用

export class RoleListComponent implements OnInit {
 constructor(private toolbarTitleService:ToolbarTitleService) {
   console.log(this.toolbarTitleService.title);
   }
 ngOnInit() { }
}

子组件传值给母组件

那么我想反过来传值回去该怎么办,即使我在子组件注入了service,母组件也不会在我修改了servie的值之后得到通知,这时候就需要用到subscribe

service代码:

import { Injectable } from '@angular/core';
import { Subject } from 'rxjs/Subject';

@Injectable()
export class ToolbarTitleService {
 private titleSource = new Subject();
 //获得一个Observable
 titleObservable =this.titleSource.asObservable();
 constructor() { }
 //发射数据,当调用这个方法的时候,Subject就会发射这个数据,所有订阅了这个Subject的Subscription都会接受到结果
 emitTitle(title: string) {
  this.titleSource.next(title);
 }
}

子组件代码:

import { ToolbarTitleService } from './../../common/toolbar-title.service';
import { Component, OnInit ,Output,EventEmitter} from '@angular/core';

@Component({
 selector: 'role-list',
 templateUrl: 'role-list.component.html',
 styleUrls: ['./role-list.component.css'],
 providers: [],
})

export class RoleListComponent implements OnInit {
 constructor(private toolbarTitleService:ToolbarTitleService) {
   //调用方法,发射数据
   this.toolbarTitleService.emitTitle('角色列表');
   }
 ngOnInit() { }
}

母组件:

import { Component, OnInit } from '@angular/core';
import { ToolbarTitleService } from "app/common/toolbar-title.service";
import { Subscription } from "rxjs/Subscription";

@Component({
 selector: 'admin',
 templateUrl: './admin.component.html',
 styleUrls: ['./admin.component.scss'],
 providers: [ToolbarTitleService],
})

export class AdminComponent implements OnInit {
 title: string;
 subscription: Subscription;
 constructor(private toolbarTitleService: ToolbarTitleService) {
  //使用subscribe来订阅,当数据被发射出来的时候,这里就会接收到结果
  this.subscription = this.toolbarTitleService.titleObservable.subscribe(src => console.log('得到的title:' + src));

 }

 ngOnInit() {

 }
 //销毁的时候需要取消订阅,因为订阅之后会一直处于观察者状态,不取消会导致泄露
 ngOnDestroy() {
  this.subscription.unsubscribe();
 }
}

以上这篇angular2 组件之间通过service互相传递的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 写类方式之四
Jul 05 Javascript
js运动框架_包括图片的淡入淡出效果
May 11 Javascript
js获取url参数值的两种方式
Sep 10 Javascript
javascript模拟C#格式化字符串
Aug 26 Javascript
JavaScript操作XML/HTML比较常用的对象属性集锦
Oct 30 Javascript
JavaScript+html5 canvas绘制渐变区域完整实例
Jan 26 Javascript
jQuery实现从身份证号中获取出生日期和性别的方法分析
Feb 25 Javascript
javascript用正则表达式过滤空格的实现代码
Jun 14 Javascript
微信小程序仿美团城市选择
Jun 06 Javascript
解决node-sass偶尔安装失败的方法小结
Dec 05 Javascript
详解微信小程序图片地扯转base64解决方案
Aug 18 Javascript
js验证密码强度解析
Mar 18 Javascript
详解如何webpack使用DllPlugin
Sep 30 #Javascript
浅谈angular2子组件的事件传递(任意组件事件传递)
Sep 30 #Javascript
vue-router 手势滑动触发返回功能
Sep 30 #Javascript
Vue CLI3 开启gzip压缩文件的方式
Sep 30 #Javascript
JS数组实现分类统计实例代码
Sep 30 #Javascript
浅谈微信页面入口文件被缓存解决方案
Sep 29 #Javascript
vue实现弹框遮罩点击其他区域弹框关闭及v-if与v-show的区别介绍
Sep 29 #Javascript
You might like
关于Intype一些小问题的解决办法
2008/03/28 PHP
php的mkdir()函数创建文件夹比较安全的权限设置方法
2014/07/28 PHP
基于递归实现的php树形菜单代码
2014/11/19 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
JavaScript 大数据相加的问题
2011/08/03 Javascript
分享8款优秀的 jQuery 加载动画和进度条插件
2012/10/24 Javascript
javascript跨域原因以及解决方案分享
2015/04/08 Javascript
javascript实现图片自动和可控的轮播切换特效
2015/04/13 Javascript
jquery实现Slide Out Navigation滑出式菜单效果代码
2015/09/07 Javascript
通过Jquery.cookie.js实现展示浏览网页的历史记录超管用
2015/10/23 Javascript
javascript伸缩型菜单实现代码
2015/11/16 Javascript
Angular4学习笔记之实现绑定和分包
2017/08/01 Javascript
浅谈vue3中effect与computed的亲密关系
2019/10/10 Javascript
VUE兄弟组件传值操作实例分析
2019/10/26 Javascript
vue css 引入asstes中的图片无法显示的四种解决方法
2020/03/16 Javascript
解决VUE 在IE下出现ReferenceError: Promise未定义的问题
2020/11/07 Javascript
vue的$http的get请求要加上params操作
2020/11/12 Javascript
[00:55]深扒TI7聊天轮盘语音出处3
2017/05/11 DOTA
老生常谈Python之装饰器、迭代器和生成器
2017/07/26 Python
Python实现矩阵转置的方法分析
2017/11/24 Python
Python处理命令行参数模块optpars用法实例分析
2018/05/31 Python
Python imread、newaxis用法详解
2019/11/04 Python
python连接打印机实现打印文档、图片、pdf文件等功能
2020/02/07 Python
世界上最悠久的自行车制造商:Ribble Cycles
2017/03/18 全球购物
String这个类型的class为何定义成final?
2012/11/13 面试题
出纳员岗位职责风险
2014/03/06 职场文书
《英英学古诗》教学反思
2014/04/11 职场文书
大学新闻系自荐书
2014/05/31 职场文书
党员个人对照检查材料思想汇报
2014/09/16 职场文书
个人租房协议书样本
2014/10/01 职场文书
中班下学期个人工作总结
2015/02/12 职场文书
2015年公司工作总结
2015/04/25 职场文书
2015年音乐教师个人工作总结
2015/05/20 职场文书
安全伴我行主题班会
2015/08/13 职场文书
Golang全局变量加锁的问题解决
2021/05/08 Golang
SpringBoot整合Redis入门之缓存数据的方法
2021/11/17 Redis