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 相关文章推荐
JMenuTab简单使用说明
Mar 13 Javascript
JavaScript的面向对象方法以及差别
Mar 31 Javascript
JavaScript日历实现代码
Sep 12 Javascript
一个关于javascript匿名函数的问题分析
Mar 30 Javascript
jQuery中animate()方法用法实例
Dec 24 Javascript
原生JavaScript实现动态省市县三级联动下拉框菜单实例代码
Feb 03 Javascript
JavaScript-html标题滚动效果的简单实现
Sep 08 Javascript
将 vue 生成的 js 上传到七牛的实例
Jul 28 Javascript
jq.ajax+php+mysql实现关键字模糊查询(示例讲解)
Jan 02 Javascript
详解关于Vue版本不匹配问题(Vue packages version mismatch)
Sep 17 Javascript
监听element-ui table滚动事件的方法
Mar 26 Javascript
微信小程序iBeacon测距及稳定程序的实现解析
Jul 31 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
PHP 模拟$_PUT实现代码
2010/03/15 PHP
PHP 第一节 php简介
2012/04/28 PHP
PHP 读取Postgresql中的数组
2013/04/14 PHP
php下载excel无法打开的解决方法
2013/12/24 PHP
php采用file_get_contents代替使用curl实例
2014/11/07 PHP
php自动识别文字编码并转换为目标编码的方法
2015/08/08 PHP
PHP用continue跳过本次循环中剩余代码的注意点
2017/06/27 PHP
JavaScript 设计模式之组合模式解析
2010/04/09 Javascript
js 获取子节点函数 (兼容FF与IE)
2010/04/18 Javascript
判断用户的在线状态 onbeforeunload事件
2011/03/05 Javascript
javascript 面向对象封装与继承
2014/11/27 Javascript
详解javascript的变量与标识符
2016/01/04 Javascript
利用CSS3在Angular中实现动画
2016/01/15 Javascript
AngularJS中的包含详细介绍及实现示例
2016/07/28 Javascript
微信小程序 支付简单实例及注意事项
2017/01/06 Javascript
angular十大常见问题
2017/03/07 Javascript
微信小程序页面间传递数组对象方法解析
2019/11/06 Javascript
微信小程序实现二维码签到考勤系统
2020/01/16 Javascript
TypeScript 引用资源文件后提示找不到的异常处理技巧
2020/07/15 Javascript
JavaScript arguments.callee作用及替换方案详解
2020/09/02 Javascript
在Python的Flask框架下收发电子邮件的教程
2015/04/21 Python
多版本Python共存的配置方法
2017/05/22 Python
Python进阶学习之特殊方法实例详析
2017/12/01 Python
查看django执行的sql语句及消耗时间的两种方法
2018/05/29 Python
使用Python横向合并excel文件的实例
2018/12/11 Python
在windows下使用python进行串口通讯的方法
2019/07/02 Python
python-opencv获取二值图像轮廓及中心点坐标的代码
2019/08/27 Python
Python多继承以及MRO顺序的使用
2019/11/11 Python
python使用ctypes调用扩展模块的实例方法
2020/01/28 Python
利用HTML5 Canvas制作键盘及鼠标动画的实例分享
2016/03/15 HTML / CSS
应届生.NET方向面试题
2015/05/23 面试题
2014年施工员工作总结
2014/11/18 职场文书
遗嘱继承权公证书
2015/01/26 职场文书
幼儿园中班教学反思
2016/03/03 职场文书
Python使用UDP实现720p视频传输的操作
2021/04/24 Python
Oracle 临时表空间SQL语句的实现
2021/09/25 Oracle