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 相关文章推荐
用js调用迅雷下载代码的二种方法
Apr 15 Javascript
JSON格式化输出
Nov 10 Javascript
javascript中call,apply,bind的用法对比分析
Feb 12 Javascript
javascript实现点击按钮让DIV层弹性移动的方法
Feb 24 Javascript
JavaScript获取指定元素位置的方法
Apr 08 Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
Jul 02 Javascript
js变形金刚文字特效代码分享
Aug 20 Javascript
javascript中Number的方法小结
Nov 21 Javascript
jQuery、zepto、js常用小技巧
Feb 12 Javascript
JavaScript仿微信打飞机游戏
Jul 05 Javascript
详解Js里的for…in和for…of的用法
Mar 28 Javascript
详解微信小程序-扫一扫 wx.scanCode() 扫码大变身
Apr 30 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使HTML标签自动补全闭合函数代码
2012/10/04 PHP
Yii 使用intervention/image拓展实现图像处理功能
2019/06/22 PHP
php实现图片压缩处理
2020/09/09 PHP
JS的反射问题
2010/04/07 Javascript
jquery下实现overlay遮罩层代码
2010/08/25 Javascript
jquery事件重复绑定的快速解决方法
2014/01/03 Javascript
文本框(input)获取焦点(onfocus)时样式改变的示例代码
2014/01/10 Javascript
javascript 密码框防止用户粘贴和复制的实现代码
2014/02/17 Javascript
javascript实现浏览器窗口传递参数的方法
2014/09/03 Javascript
用js传递value默认值的示例代码
2014/09/11 Javascript
jquery+CSS3实现淘宝移动网页菜单效果
2015/08/31 Javascript
分步解析JavaScript实现tab选项卡自动切换功能
2016/01/25 Javascript
JavaScript File API文件上传预览
2016/02/02 Javascript
es6+angular1.X+webpack 实现按路由功能打包项目的示例
2017/08/16 Javascript
laravel5.4+vue+element简单搭建的示例代码
2017/08/29 Javascript
解决Mac下安装nmp的淘宝镜像失败问题
2018/05/16 Javascript
微信小程序里引入SVG矢量图标的方法
2019/09/20 Javascript
[03:52]显微镜下的DOTA2第三期——英雄在无聊的时候干什么
2014/06/20 DOTA
Python下载懒人图库JavaScript特效
2015/05/28 Python
Python实现获取邮箱内容并解析的方法示例
2018/06/16 Python
对python 数据处理中的LabelEncoder 和 OneHotEncoder详解
2018/07/11 Python
Python中一个for循环循环多个变量的示例
2019/07/16 Python
Django 框架模型操作入门教程
2019/11/05 Python
python3正则模块re的使用方法详解
2020/02/11 Python
Pymysql实现往表中插入数据过程解析
2020/06/02 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
2021/02/22 Python
CSS3圆角和渐变2种常用功能详解
2016/01/06 HTML / CSS
html5开发三八女王节表白神器
2018/03/07 HTML / CSS
New Balance英国官方网站:始于1906年,百年慢跑品牌
2016/12/07 全球购物
演讲稿格式范文
2014/05/19 职场文书
2015年教师教学工作总结
2015/04/28 职场文书
红色故事汇观后感
2015/06/18 职场文书
浅谈Python实现opencv之图片色素的数值运算和逻辑运算
2021/06/23 Python
使用python创建股票的时间序列可视化分析
2022/03/03 Python
漫画「古见同学有交流障碍症」第25卷封面公开
2022/03/21 日漫
字节飞书面试promise.all实现示例
2022/06/16 Javascript