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 相关文章推荐
强制设为首页代码
Jun 19 Javascript
JS实现时间格式化的方式汇总
Oct 16 Javascript
JS随机漂浮广告代码具体实例
Nov 19 Javascript
js 异步操作回调函数如何控制执行顺序
Dec 24 Javascript
JS实现跟随鼠标闪烁转动色块的方法
Feb 26 Javascript
JS实现仿Windows经典风格的选项卡Tab切换代码
Oct 20 Javascript
详解JavaScript基于面向对象之继承
Dec 13 Javascript
Webpack+Vue如何导入Jquery和Jquery的第三方插件
Feb 20 Javascript
纯javascript前端实现base64图片下载(兼容IE10+)
Sep 14 Javascript
vue router导航守卫(router.beforeEach())的使用详解
Apr 19 Javascript
ES6 async、await的基本使用方法示例
Jun 06 Javascript
通过vue.extend实现消息提示弹框的方法记录
Jan 07 Vue.js
详解如何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异步执行的详解
2013/06/03 PHP
php实现无限级分类(递归方法)
2015/08/06 PHP
php foreach如何跳出两层循环(详解)
2016/11/05 PHP
CI框架(CodeIgniter)公共模型类定义与用法示例
2017/08/10 PHP
jquery下div 的resize事件示例代码
2014/03/09 Javascript
JavaScript中的style.cssText使用教程
2014/11/06 Javascript
浅谈jquery设置和获得checkbox选中的问题
2016/08/19 Javascript
JavaScript编码风格指南(中文版)
2016/08/26 Javascript
JS实现PC手机端和嵌入式滑动拼图验证码三种效果
2017/02/15 Javascript
详解使用nvm安装node.js
2017/07/18 Javascript
jquery点击回车键实现登录效果并默认焦点的方法
2018/03/09 jQuery
jquery.pagination.js分页使用教程
2018/10/23 jQuery
详解Vue调用手机相机和相册以及上传
2019/05/05 Javascript
vue项目添加多页面配置的步骤详解
2019/05/22 Javascript
windows系统中python使用rar命令压缩多个文件夹示例
2014/05/06 Python
Python中实现字符串类型与字典类型相互转换的方法
2014/08/18 Python
简单的Python2.7编程初学经验总结
2015/04/01 Python
python文件与目录操作实例详解
2016/02/22 Python
Python数据结构之单链表详解
2017/09/12 Python
教你用一行Python代码实现并行任务(附代码)
2018/02/02 Python
Python3.5内置模块之random模块用法实例分析
2019/04/26 Python
python logging 日志的级别调整方式
2020/02/21 Python
HTML5和CSS3让网页设计提升到下一个高度
2009/08/14 HTML / CSS
HTML5实现移动端复制功能
2018/04/19 HTML / CSS
canvas实现二维码和图片合成的示例代码
2018/08/01 HTML / CSS
Net-A-Porter美国官网:全球时尚奢侈品名站
2017/02/11 全球购物
全球销量第一生发产品:Viviscal
2017/12/21 全球购物
生物技术专业研究生自荐信
2013/09/22 职场文书
《学会合作》教学反思
2014/04/12 职场文书
经贸日语专业自荐信
2014/09/02 职场文书
教师党员学习十八届四中全会思想汇报
2014/11/03 职场文书
2015新年寄语大全
2014/12/08 职场文书
市场营销计划书范文
2015/01/16 职场文书
2015年社区重阳节活动总结
2015/07/30 职场文书
2016年企业先进员工事迹材料
2016/02/25 职场文书
SpringBoot使用AOP实现统计全局接口访问次数详解
2022/06/16 Java/Android