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 相关文章推荐
在网页中屏蔽快捷键
Sep 06 Javascript
js中判断控件是否存在
Aug 25 Javascript
jquery事件机制扩展插件 jquery鼠标右键事件。
Dec 26 Javascript
js中有关IE版本检测
Jan 04 Javascript
处理及遍历XML文档DOM元素属性及方法整理
Aug 23 Javascript
JavaScript数据存储 Cookie篇
Jul 02 Javascript
AngularJS框架中的双向数据绑定机制详解【减少需要重复的开发代码量】
Jan 19 Javascript
vue.js获取数据库数据实例代码
May 26 Javascript
用js屏蔽被http劫持的浮动广告实现方法
Aug 10 Javascript
React学习笔记之列表渲染示例详解
Aug 22 Javascript
Vue.js实现输入框绑定的实例代码
Aug 24 Javascript
Vue2.0基于vue-cli+webpack同级组件之间的通信教程(推荐)
Sep 14 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
Session的工作方式
2006/10/09 PHP
php在页面中调用fckeditor编辑器的方法
2011/06/10 PHP
PHP内置的Math函数效率测试
2014/12/01 PHP
Symfony2实现在doctrine中内置数据的方法
2016/02/05 PHP
学习并汇集javascript匿名函数
2010/11/25 Javascript
javascript继承之为什么要继承
2012/11/10 Javascript
使用jQuery fancybox插件打造一个实用的数据传输模态弹出窗体
2013/01/15 Javascript
JS实现图片无间断滚动代码汇总
2014/07/30 Javascript
JavaScript字符串对象charAt方法入门实例(用于取得指定位置的字符)
2014/10/17 Javascript
非jQuery实现照片散落桌子上,单击放大的LightBox效果
2014/11/28 Javascript
js实现简单随机抽奖的方法
2015/01/27 Javascript
在JavaScript中正确引用bind方法的应用
2015/05/11 Javascript
prototype框架中美元符号$用法分析
2016/01/22 Javascript
jQuery遍历json的方法(推荐)
2016/06/12 Javascript
自动化测试读写64位操作系统的注册表
2016/08/15 Javascript
Angular.js中angular-ui-router的简单实践
2017/07/18 Javascript
angular内置provider之$compileProvider详解
2017/09/27 Javascript
JavaScript执行环境及作用域链实例分析
2018/08/01 Javascript
Angular7中创建组件/自定义指令/管道的方法实例详解
2019/04/02 Javascript
jquery实现弹窗(系统提示框)效果
2019/12/10 jQuery
在vue中实现禁止回退上一步,路由不存历史记录
2020/07/22 Javascript
解决ant Design Search无法输入内容的问题
2020/10/29 Javascript
Python中用Descriptor实现类级属性(Property)详解
2014/09/18 Python
Python多进程通信Queue、Pipe、Value、Array实例
2014/11/21 Python
python shell根据ip获取主机名代码示例
2017/11/25 Python
TensorFlow实现简单卷积神经网络
2018/05/24 Python
Numpy中的数组搜索中np.where方法详细介绍
2021/01/08 Python
CSS3制作3D立方体loading特效
2020/11/09 HTML / CSS
乌克兰移动电子产品和相关配件的在线商店:iTMag
2020/03/16 全球购物
中学生团员自我评价分享
2013/12/07 职场文书
讲文明树新风公益广告宣传方案
2014/02/25 职场文书
校园学雷锋广播稿
2014/10/08 职场文书
2015年试用期工作总结
2014/12/12 职场文书
孔子观后感
2015/06/08 职场文书
合理化建议书范文
2015/09/14 职场文书
广播稿:校园广播稿范文
2019/04/17 职场文书