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 相关文章推荐
Javascript 日期对象Date扩展方法
May 30 Javascript
Javascript 中文字符串处理额外注意事项
Nov 15 Javascript
jQuery插件jquery-barcode实现条码打印的方法
Nov 25 Javascript
jQuery Validation PlugIn的使用方法详解
Dec 18 Javascript
使用微信内置浏览器点击下拉框出现页面乱跳转现象(iphone),该怎么办
Jan 04 Javascript
js仿腾讯QQ的web登陆界面
Aug 19 Javascript
Javascrip实现文字跳动特效
Nov 27 Javascript
JS实现直接运行html代码的方法
Mar 13 Javascript
详解Angular 自定义结构指令
Jun 21 Javascript
JavaScript同源策略和跨域访问实例详解
Apr 03 Javascript
详解vue中使用axios对同一个接口连续请求导致返回数据混乱的问题
Nov 06 Javascript
js Math数学简单使用操作示例
Mar 13 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中的HashTable结构详解
2013/06/13 PHP
PHP连接操作access数据库实例
2015/03/30 PHP
php中关于长度计算容易混淆的问题分析
2016/05/27 PHP
PHP Header用于页面跳转时的几个注意事项
2016/10/21 PHP
PHP与jquery实时显示网站在线人数实例详解
2016/12/02 PHP
php远程请求CURL实例教程(爬虫、保存登录状态)
2020/12/10 PHP
js取滚动条的尺寸的函数代码
2011/11/30 Javascript
Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
2013/11/14 Javascript
js几秒以后倒计时跳转示例
2013/12/26 Javascript
jQuery中offsetParent()方法用法实例
2015/01/19 Javascript
javascript实现根据3原色制作颜色选择器的方法
2015/07/17 Javascript
原生JS轮播图插件
2017/02/09 Javascript
使用Node.js实现简易MVC框架的方法
2017/08/07 Javascript
实战node静态文件服务器的示例代码
2018/03/08 Javascript
Angular如何在应用初始化时运行代码详解
2018/06/11 Javascript
JS实现的全选、全不选及反选功能【案例】
2019/02/19 Javascript
javascript面向对象三大特征之继承实例详解
2019/07/24 Javascript
jQuery高级编程之js对象、json与ajax用法实例分析
2019/11/01 jQuery
Nodejs + Websocket 指定发送及群聊的实现
2020/01/09 NodeJs
[01:38]DOTA2 2015国际邀请赛中国区预选赛 Showopen
2015/06/01 DOTA
详解在Python程序中解析并修改XML内容的方法
2015/11/16 Python
Flask web开发处理POST请求实现(登录案例)
2018/07/26 Python
详解Python3 对象组合zip()和回退方式*zip
2019/05/15 Python
Python Numpy计算各类距离的方法
2019/07/05 Python
python动态文本进度条的实例代码
2020/01/22 Python
python数据处理——对pandas进行数据变频或插值实例
2020/04/22 Python
HTML5 绘制图像(上)之:关于canvas元素引领下一代web页面的问题
2013/04/24 HTML / CSS
全球最大的房车租赁市场:Outdoorsy
2018/09/19 全球购物
澳大利亚儿童鞋在线:The Trybe
2019/07/16 全球购物
一些Unix笔试题和面试题
2013/01/22 面试题
中式餐厅创业计划书范文
2014/01/23 职场文书
国旗下的演讲稿
2014/05/08 职场文书
幼儿园校园小喇叭广播稿
2014/10/17 职场文书
2015年乡镇卫生院工作总结
2015/04/22 职场文书
Python字典和列表性能之间的比较
2021/06/07 Python
springboot集成springCloud中gateway时启动报错的解决
2021/07/16 Java/Android