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 相关文章推荐
jquery1.4 教程二 ajax方法的改进
Feb 25 Javascript
一些有用的JavaScript和jQuery的片段分享
Aug 23 Javascript
js循环改变div颜色具体方法
Jun 25 Javascript
jQuery中prepend()方法使用详解
Aug 11 Javascript
如何高效率去掉js数组中的重复项
Apr 12 Javascript
Vue.js实现一个SPA登录页面的过程【推荐】
Apr 29 Javascript
promise处理多个相互依赖的异步请求(实例讲解)
Aug 03 Javascript
JS实现倒计时图文效果
Nov 17 Javascript
浅谈Vue 性能优化之深挖数组
Dec 11 Javascript
小程序文字跑马灯效果
Dec 28 Javascript
小程序自定义日历效果
Dec 29 Javascript
详解JavaScript之Array.reduce源码解读
Nov 01 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基于Snoopy解析网页html的方法
2015/07/09 PHP
Laravel多用户认证系统示例详解
2018/03/13 PHP
PHP实现动态创建XML文档的方法
2018/03/30 PHP
javascript new一个对象的实质
2010/01/07 Javascript
mysql输出数据赋给js变量报unterminated string literal错误原因
2010/05/22 Javascript
推荐20家国外的脚本下载网站
2011/04/28 Javascript
javascript 兼容各个浏览器的事件
2015/02/04 Javascript
javaScript中with函数用法实例分析
2015/06/08 Javascript
jquery实现在网页指定区域显示自定义右键菜单效果
2015/08/25 Javascript
jQuery控制frames及frame页面JS的方法
2016/03/08 Javascript
Vue.js每天必学之过渡与动画
2016/09/06 Javascript
BootStrap中按钮点击后被禁用按钮的最佳实现方法
2016/09/23 Javascript
js中的事件委托或是事件代理使用详解
2017/06/23 Javascript
JavaScript框架Angular和React深度对比
2017/11/20 Javascript
jfinal与bootstrap的登出实战详解
2017/11/27 Javascript
JavaScript实现元素滚动条到达一定位置循环追加内容
2017/12/28 Javascript
详解vue移动端项目的适配(以mint-ui为例)
2018/08/17 Javascript
js实现3D照片墙效果
2019/10/28 Javascript
vue-cli3项目配置eslint代码规范的完整步骤
2020/09/10 Javascript
Python+tkinter使用40行代码实现计算器功能
2018/01/30 Python
Pandas之ReIndex重新索引的实现
2019/06/25 Python
python虚拟环境的安装和配置(virtualenv,virtualenvwrapper)
2019/08/09 Python
Python二维数组实现求出3*3矩阵对角线元素的和示例
2019/11/29 Python
Python进程间通信multiprocess代码实例
2020/03/18 Python
BeautifulSoup获取指定class样式的div的实现
2020/12/07 Python
canvas绘图按照contain或者cover方式适配并居中显示
2019/02/18 HTML / CSS
中国最大隐形眼镜网上商城:视客眼镜网
2016/10/30 全球购物
UGG美国官网:购买UGG雪地靴、拖鞋和鞋子
2017/12/31 全球购物
美国儿童服装、家具和玩具精品店:Maisonette
2019/11/24 全球购物
澳大利亚在线划船、露营和钓鱼商店:BCF Australia
2020/03/22 全球购物
文秘自荐信
2013/10/20 职场文书
小区的门卫岗位职责
2014/10/01 职场文书
环保宣传语大全
2015/07/13 职场文书
2016年小学植树节活动总结
2016/03/16 职场文书
Redis三种集群模式详解
2021/10/05 Redis
Python可视化神器pyecharts绘制水球图
2022/07/07 Python