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中的稀疏数组与密集数组[译]
Sep 17 Javascript
js随机生成26个大小写字母
Feb 12 Javascript
在ASP.NET MVC项目中使用RequireJS库的用法示例
Feb 15 Javascript
轻松5句话解决JavaScript的作用域
Jul 15 Javascript
完美解决jQuery 鼠标快速滑过后,会执行多次滑出的问题
Dec 08 Javascript
js实现可输入可选择的select下拉框
Dec 21 Javascript
Bootstrap导航条鼠标悬停下拉菜单
Jan 04 Javascript
微信小程序通过api接口将json数据展现到小程序示例
Jan 20 Javascript
Vue中CSS动画原理的实现
Feb 13 Javascript
js实现一个页面多个倒计时的3种方法
Feb 25 Javascript
微信小程序实现的五星评价功能示例
Apr 25 Javascript
vue 实现一个简单的全局调用弹窗案例
Sep 10 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
smarty模板引擎中自定义函数的方法
2015/01/22 PHP
SCP远程VPS快速搬家和WDCP升级php5.3安装memcached和eaccelerator教程
2017/07/27 PHP
PHP设计模式之简单工厂和工厂模式实例分析
2019/03/25 PHP
学习并汇集javascript匿名函数
2010/11/25 Javascript
浅谈 jQuery 事件源码定位问题
2014/06/18 Javascript
基于jquery固定于顶部的导航响应浏览器滚动条事件
2014/11/02 Javascript
Extjs实现下拉菜单效果
2016/04/01 Javascript
动态更新highcharts数据的实现方法
2016/05/28 Javascript
深入理解ECMAScript的几个关键语句
2016/06/01 Javascript
AngularJS自定义服务与fliter的混合使用
2016/11/24 Javascript
详解在AngularJS的controller外部直接获取$scope
2017/06/02 Javascript
AngularJS中ng-class用法实例分析
2017/07/06 Javascript
微信小程序实现列表下拉刷新上拉加载
2020/07/29 Javascript
js数组去重的N种方法(小结)
2018/06/07 Javascript
JavaScript实现连连看连线算法
2019/01/05 Javascript
Vue插件之滑动验证码
2019/09/21 Javascript
JavaScript(js)处理的HTML事件、键盘事件、鼠标事件简单示例
2019/11/19 Javascript
JS代码简洁方式之函数方法详解
2020/07/28 Javascript
js基于canvas实现时钟组件
2021/02/07 Javascript
[10:21]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster 选手采访
2021/03/11 DOTA
python使用xlrd与xlwt对excel的读写和格式设定
2017/01/21 Python
python实现汽车管理系统
2018/11/30 Python
python绘图模块matplotlib示例详解
2019/07/26 Python
python twilio模块实现发送手机短信功能
2019/08/02 Python
Python建造者模式案例运行原理解析
2020/06/29 Python
详解用Python爬虫获取百度企业信用中企业基本信息
2020/07/02 Python
Europcar澳大利亚官网:全球汽车租赁领域的领导者
2019/03/24 全球购物
生产厂厂长岗位职责
2013/12/25 职场文书
装修五一活动策划案
2014/01/23 职场文书
庆七一宣传标语
2014/10/08 职场文书
高中教师个人总结
2015/02/10 职场文书
法院个人总结
2015/03/03 职场文书
2015年电教工作总结
2015/05/26 职场文书
Django如何与Ajax交互
2021/04/29 Python
java协程框架quasar和kotlin中的协程对比分析
2022/02/24 Java/Android
openEuler 搭建java开发环境的详细过程
2022/06/10 Servers