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 相关文章推荐
关于在IE下的一个安全BUG --可用于跟踪用户的系统鼠标位置
Apr 17 Javascript
浅析JavaScript 调试方法和技巧
Oct 22 Javascript
基于JavaScript代码实现兼容各浏览器的设为首页和加入收藏
Jan 07 Javascript
JS中使用mailto实现将用户在网页中输入的内容传递到本地邮件客户端
Oct 08 Javascript
AngularJS验证信息框架的封装插件用法【w5cValidator扩展插件】
Nov 03 Javascript
angularJS模态框$modal实例代码
May 27 Javascript
Vue.js搭建移动端购物车界面
Jun 28 Javascript
jQuery进阶实践之利用最优雅的方式如何写ajax请求
Dec 20 jQuery
JavaScript实现多叉树的递归遍历和非递归遍历算法操作示例
Feb 08 Javascript
vue的mixins属性详解
Mar 14 Javascript
详解微信小程序-canvas绘制文字实现自动换行
Apr 26 Javascript
基于jquery实现的tab选项卡功能示例【附源码下载】
Jun 10 jQuery
详解如何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
php explode函数实例代码
2012/02/27 PHP
PHP中copy on write写时复制机制介绍
2014/05/13 PHP
PHP入门教程之数学运算技巧总结
2016/09/11 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
2017/02/28 PHP
浅谈Yii乐观锁的使用及原理
2017/07/25 PHP
如何在Laravel之外使用illuminate组件详解
2020/09/20 PHP
根据地区不同显示时间的javascript代码
2007/08/13 Javascript
jqPlot jquery的页面图表绘制工具
2009/07/25 Javascript
可在线编辑网页文字效果代码(单击)
2013/03/02 Javascript
原生javascript兼容性测试实例
2013/07/01 Javascript
Jquery中国地图热点效果-鼠标经过弹出提示层信息的简单实例
2014/02/12 Javascript
node.js中的fs.readFile方法使用说明
2014/12/15 Javascript
javascript获取元素离文档各边距离的方法
2015/02/13 Javascript
JS动态修改图片的URL(src)的方法
2015/04/01 Javascript
javascript禁止访客复制网页内容的实现代码
2015/08/05 Javascript
原生js实现百叶窗效果及原理介绍
2016/04/12 Javascript
详解Javascript中的原型OOP
2016/10/12 Javascript
jquery实现下拉框多选方法介绍
2017/01/03 Javascript
Angualrjs和bootstrap相结合实现数据表格table
2017/03/30 Javascript
微信小程序的生命周期的详解
2017/10/19 Javascript
Angular利用trackBy提升性能的方法
2018/01/26 Javascript
浅谈VUE-CLI脚手架热更新太慢的原因和解决方法
2018/09/28 Javascript
EXTJS7实现点击拖拉选择文本
2020/12/17 Javascript
python实现数通设备端口监控示例
2014/04/02 Python
python 3利用Dlib 19.7实现摄像头人脸检测特征点标定
2018/02/26 Python
opencv转换颜色空间更改图片背景
2019/08/20 Python
Python多线程操作之互斥锁、递归锁、信号量、事件实例详解
2020/03/24 Python
基于Python爬虫采集天气网实时信息
2020/06/05 Python
python与pycharm有何区别
2020/07/01 Python
Python 实现一个计时器
2020/07/28 Python
Linux上比较文件的命令都有哪些
2013/09/28 面试题
硕士生找工作求职信
2014/07/05 职场文书
公司外出活动方案
2014/08/14 职场文书
让生命充满爱观后感
2015/06/08 职场文书
Django migrate报错的解决方案
2021/05/20 Python
react 项目中引入图片的几种方式
2021/06/02 Javascript