Angular父子组件通过服务传参的示例方法


Posted in Javascript onOctober 31, 2018

今天在使用ngx-translate做多语言的时候遇到了一个问题,需要在登录页面点击按钮,然后调用父组件中的一个方法。
一开始想到了@input和@output,然而由于并不是单纯的父子组件关系,而是包含路由的父子组件关系,所以并不能使用@input方法和@output方法。

然后去搜索一下,发现stackoverflow上有答案,用的是service来进行传参,发现很好用,所以和大家分享一下。

首先,创建一个service.

shared-service.ts

import { Injectable } from '@angular/core';
import { Subject } from 'rxjs/Subject';
@Injectable()
export class SharedService {
 // Observable string sources
 private emitChangeSource = new Subject<any>();
 // Observable string streams
 changeEmitted$ = this.emitChangeSource.asObservable();
 // Service message commands
 emitChange(change: any) {
 this.emitChangeSource.next(change);
 }
}

然后把这个service分别注入父组件和子组件所属的module中,记得要放在providers里面。

然后把service再引入到父子组件各自的component里面。

子组件通过onClick方法传递参数:

child.component.ts

import { Component} from '@angular/core';
@Component({
 templateUrl: 'child.html',
 styleUrls: ['child.scss']
})
export class ChildComponent {
 constructor(
 private _sharedService: SharedService
 ) { }
onClick(){
 this._sharedService.emitChange('Data from child');
 }
}

父组件通过服务接收参数:

parent.component.ts

import { Component} from '@angular/core';
@Component({
 templateUrl: 'parent.html',
 styleUrls: ['parent.scss']
})
export class ParentComponent {
 constructor(
 private _sharedService: SharedService
 ) {
 _sharedService.changeEmitted$.subscribe(
 text => {
 console.log(text);
 });
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Mootools 1.2教程(21)——类(二)
Sep 15 Javascript
基于JQuery的密码强度验证代码
Mar 01 Javascript
js提交form表单,并传递参数的实现方法
May 25 Javascript
jQuery获取浏览器类型和版本号的方法
Jul 05 Javascript
两行代码轻松搞定JavaScript日期验证
Aug 03 Javascript
JavaScript数据结构之数组的表示方法示例
Apr 12 Javascript
js 获取元素的具体样式信息getcss(实例讲解)
Jul 05 Javascript
Easyui使用Dialog行内按钮布局的实例
Jul 27 Javascript
妙用缓存调用链实现JS方法的重载
Apr 30 Javascript
详解JS判断页面是在手机端还是在PC端打开的方法
Apr 26 Javascript
一文快速了解JQuery中的AJAX
May 31 jQuery
Javascript数组方法reduce的妙用之处分享
Jun 10 Javascript
JS中通过url动态获取图片大小的方法小结(两种方法)
Oct 31 #Javascript
微信小程序实现留言功能
Oct 31 #Javascript
微信小程序签到功能
Oct 31 #Javascript
vue+element-ui实现表格编辑的三种实现方式
Oct 31 #Javascript
VUE+Element UI实现简单的表格行内编辑效果的示例的代码
Oct 31 #Javascript
微信小程序实现签到功能
Oct 31 #Javascript
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
Oct 31 #Javascript
You might like
PHP环境搭建最新方法
2006/09/05 PHP
php 分页类 扩展代码
2009/06/11 PHP
VIM中设置php自动缩进为4个空格的方法详解
2013/06/14 PHP
5款适合PHP使用的HTML编辑器推荐
2015/07/03 PHP
php用户登录之cookie信息安全分析
2016/05/13 PHP
Laravel框架自定义验证过程实例分析
2019/02/01 PHP
基于PHP+Jquery制作的可编辑的表格的代码
2011/04/10 Javascript
javascript开发随笔一 preventDefault的必要
2011/11/25 Javascript
浅谈EasyUI中编辑treegrid的方法
2015/03/01 Javascript
深入理解JavaScript 函数
2016/06/06 Javascript
JavaScript学习小结之被嫌弃的eval函数和with语句实例详解
2016/08/01 Javascript
浅谈JS中的!=、== 、!==、===的用法和区别
2016/09/24 Javascript
js获取文件里面的所有文件名(实例)
2017/10/17 Javascript
three.js实现3D影院的原理的代码分析
2017/12/18 Javascript
详解使用React进行组件库开发
2018/02/06 Javascript
vue axios请求拦截实例代码
2018/03/29 Javascript
Node.js Buffer用法解读
2018/05/18 Javascript
JS浮点数运算结果不精确的Bug解决
2019/08/01 Javascript
JavaScript 实现轮播图特效的示例
2020/11/05 Javascript
[01:52]DOTA2完美大师赛Vega战队趣味视频——kpii老师小课堂
2017/11/25 DOTA
Python中__init__和__new__的区别详解
2014/07/09 Python
浅谈Python类里的__init__方法函数,Python类的构造函数
2016/12/10 Python
Python实现利用最大公约数求三个正整数的最小公倍数示例
2017/09/30 Python
Python绘制的二项分布概率图示例
2018/08/22 Python
python将字符串转变成dict格式的实现
2019/11/18 Python
使用OpenCV-python3实现滑动条更新图像的Canny边缘检测功能
2019/12/12 Python
Python的in,is和id函数代码实例
2020/04/18 Python
python json.dumps() json.dump()的区别详解
2020/07/14 Python
Python扫描端口的实现
2021/01/25 Python
canvas学习总结三之绘制路径-线段
2019/01/31 HTML / CSS
生物化工专业个人自荐信
2013/09/26 职场文书
简历自我评价怎么写呢?
2014/01/06 职场文书
检查接待方案
2014/02/27 职场文书
社区健康教育工作方案
2014/06/03 职场文书
2015个人年度工作总结范文
2015/05/28 职场文书
创业计划书之冷饮店
2019/09/27 职场文书