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 相关文章推荐
jquery tab插件制作实现代码
Jun 22 Javascript
Jquery chosen动态设置值实例介绍
Aug 08 Javascript
js如何取消事件冒泡
Sep 23 Javascript
extjs表格文本启用选择复制功能具体实现
Oct 11 Javascript
javascript中call和apply的用法示例分析
Apr 02 Javascript
JavaScript中停止执行setInterval和setTimeout事件的方法
May 14 Javascript
AngularJS 实现JavaScript 动画效果详解
Sep 08 Javascript
AngularJS API之copy深拷贝详解及实例
Sep 14 Javascript
基于JavaScript实现窗口拖动效果
Jan 18 Javascript
微信小程序 标签传入数据
May 08 Javascript
layui点击按钮页面会自动刷新的解决方案
Oct 25 Javascript
详解Vue的ref特性的使用
Jan 24 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
Apache设置虚拟WEB
2006/10/09 PHP
php获取远程文件的内容和大小
2015/11/03 PHP
tp5(thinkPHP5)操作mongoDB数据库的方法
2018/01/20 PHP
php数据结构之顺序链表与链式线性表示例
2018/01/22 PHP
js 分栏效果实现代码
2009/08/29 Javascript
基于jQuery的输入框在光标位置插入内容, 并选中
2011/10/29 Javascript
getJSON调用后台json数据时函数被调用两次的原因猜想
2013/09/29 Javascript
Javascript中获取对象的原型对象的方法小结
2015/02/25 Javascript
理解javascript中的with关键字
2016/02/15 Javascript
BootStrap点击下拉菜单项后显示一个新的输入框实现代码
2016/05/16 Javascript
Bootstrap实现弹性搜索框
2016/07/11 Javascript
深入理解JavaScript中Ajax
2016/08/02 Javascript
JS实现HTML标签转义及反转义
2020/04/14 Javascript
Vue.js 2.0 移动端拍照压缩图片预览及上传实例
2017/04/27 Javascript
Canvas放置反弹效果随机图形(实例)
2017/08/17 Javascript
javascript trie前缀树的示例
2018/01/29 Javascript
vue slot 在子组件中显示父组件传递的模板
2018/03/02 Javascript
vue实现计算器功能
2020/02/22 Javascript
解决angular 使用原生拖拽页面卡顿及表单控件输入延迟问题
2020/04/21 Javascript
Python常用随机数与随机字符串方法实例
2015/04/09 Python
Python实现求两个csv文件交集的方法
2017/09/06 Python
python 获取一个值在某个区间的指定倍数的值方法
2018/11/12 Python
详解PyCharm+QTDesigner+PyUIC使用教程
2019/06/13 Python
python 链接sqlserver 写接口实例
2020/03/11 Python
Django权限设置及验证方式
2020/05/13 Python
真正了解CSS3背景下的@font face规则
2017/05/04 HTML / CSS
HTML5本地存储之IndexedDB
2017/06/16 HTML / CSS
小区门卫岗位职责
2013/12/31 职场文书
2014年教师节寄语
2014/04/03 职场文书
渠道运营商合作协议书范本
2014/10/06 职场文书
表扬稿范文
2015/01/17 职场文书
漂亮妈妈观后感
2015/06/08 职场文书
师范生教育见习总结
2015/06/23 职场文书
Redis数据结构之链表与字典的使用
2021/05/11 Redis
python中的class_static的@classmethod的巧妙用法
2021/06/22 Python
简单聊聊TypeScript只读修饰符
2022/04/06 Javascript