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控件
May 07 Javascript
js实现仿阿里巴巴城市选择框效果实例
Jun 24 Javascript
jQuery实现点击按钮弹出可关闭层的浮动层插件
Sep 19 Javascript
解析Node.js基于模块和包的代码部署方式
Feb 16 Javascript
BootStrap使用file-input插件上传图片的方法
Sep 05 Javascript
Vue filters过滤器的使用方法
Jul 14 Javascript
动手写一个angular版本的Message组件的方法
Dec 16 Javascript
JS中数据结构之栈
Jan 01 Javascript
基于Vue的侧边目录组件的实现
Feb 05 Javascript
使用vue实现HTML页面生成图片的方法
Mar 12 Javascript
解决antd 下拉框 input [defaultValue] 的值的问题
Oct 31 Javascript
Vue组件化(ref,props, mixin,.插件)详解
May 15 Vue.js
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实现多进程并行执行脚本
2013/06/18 PHP
PHP使用glob方法遍历文件夹下所有文件的实例
2018/10/17 PHP
yii2 开发api接口时优雅的处理全局异常的方法
2019/05/14 PHP
javascript操作JSON的要领总结
2012/12/09 Javascript
javascript之典型高阶函数应用介绍
2013/01/10 Javascript
js string 转 int 注意的问题小结
2013/08/15 Javascript
在百度知道团队中快速审批新成员的js脚本
2014/02/02 Javascript
js生成动态表格并为每个单元格添加单击事件的方法
2014/04/14 Javascript
Bootstrap如何创建表单
2016/10/21 Javascript
Boostrap栅格系统与自己额外定义的媒体查询的冲突问题
2017/02/19 Javascript
详解jquery插件jquery.viewport.js学习使用方法
2017/09/08 jQuery
Django中使用jquery的ajax进行数据交互的实例代码
2017/10/15 jQuery
js实现Tab选项卡切换效果
2020/07/17 Javascript
判断滚动条滑到底部触发事件(实例讲解)
2017/11/15 Javascript
jQuery实现轮播图及其原理详解
2020/04/12 jQuery
JavaScript实现动态添加、移除元素或属性的方法分析
2019/01/03 Javascript
微信小程序渲染性能调优小结
2019/07/30 Javascript
jQuery操作元素的内容和样式完整实例分析
2020/01/10 jQuery
javascript canvas检测小球碰撞
2020/04/17 Javascript
Vue.js桌面端自定义滚动条组件之美化滚动条VScroll
2020/12/01 Vue.js
[01:39](回顾)各路豪强针锋相对,几经鏖战四强产生
2014/07/01 DOTA
Python BeautifulSoup中文乱码问题的2种解决方法
2014/04/22 Python
python获取当前时间对应unix时间戳的方法
2015/05/15 Python
使用Python保存网页上的图片或者保存页面为截图
2016/03/05 Python
Python格式化字符串f-string概览(小结)
2019/06/18 Python
python opencv捕获摄像头并显示内容的实现
2019/07/11 Python
使用html5实现表格实现标题合并的实例代码
2019/05/13 HTML / CSS
西班牙在线宠物商店:zooplus.es
2017/02/24 全球购物
大专生简历的自我评价
2013/11/26 职场文书
农场厂长岗位职责
2013/12/28 职场文书
综艺节目策划方案
2014/06/13 职场文书
女生抽烟检讨书
2014/10/05 职场文书
2015年个人招商工作总结
2015/04/25 职场文书
总结Java对象被序列化的两种方法
2021/06/30 Java/Android
Python 中 Shutil 模块详情
2021/11/11 Python
Mybatis-Plus进阶分页与乐观锁插件及通用枚举和多数据源详解
2022/03/21 Java/Android