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学习笔记(十七)js 优化
Feb 04 Javascript
收集的10个免费的jQuery相册
Feb 26 Javascript
详解JavaScript中的4种类型识别方法
Sep 14 Javascript
基于jQuery实现多层次的手风琴效果附源码
Sep 21 Javascript
js判断鼠标位置是否在某个div中的方法
Feb 26 Javascript
javascript数组遍历的方法实例分析
Sep 13 Javascript
JS基于递归实现倒计时效果的方法
Nov 26 Javascript
Vue组件开发初探
Feb 14 Javascript
AngularJS的脏检查深入分析
Apr 22 Javascript
在vue中封装可复用的组件方法
Mar 01 Javascript
微信小程序实现左右联动的实战记录
Jul 05 Javascript
es6中new.target的作用和使用场景简单示例分析
Mar 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
Cappuccino 卡布其诺咖啡之制作
2021/03/03 冲泡冲煮
php遍历数组的方法分享
2012/03/22 PHP
深入分析php中接口与抽象类的区别
2013/06/08 PHP
PHP使用PHPExcel实现批量上传到数据库的方法
2017/06/08 PHP
搜索附近的人PHP实现代码
2018/02/11 PHP
IE和Firefox下javascript的兼容写法小结
2008/12/10 Javascript
Javascript 模式实例 观察者模式
2009/10/24 Javascript
jQuery.Validate验证库的使用介绍
2013/04/26 Javascript
jquery属性过滤选择器使用示例
2013/06/18 Javascript
JavaScript运行机制之事件循环(Event Loop)详解
2014/10/10 Javascript
JavaScript实现文本框中默认显示背景图片在获得焦点后消失的方法
2015/07/01 Javascript
jquery实现简单文字提示效果
2015/12/02 Javascript
移动端使用localStorage缓存Js和css文的方法(web开发)
2016/09/20 Javascript
Vue.js中的computed工作原理
2018/03/22 Javascript
使用webpack打包后的vue项目如何正确运行(express)
2018/10/26 Javascript
js中的深浅拷贝问题简析
2019/05/10 Javascript
js实现浏览器打印功能的示例代码
2020/07/15 Javascript
Python开发的单词频率统计工具wordsworth使用方法
2014/06/25 Python
Python操作串口的方法
2015/06/17 Python
Python实现简单拆分PDF文件的方法
2015/07/30 Python
Python基本语法经典教程
2016/03/11 Python
Python中用字符串调用函数或方法示例代码
2017/08/04 Python
pandas 取出表中一列数据所有的值并转换为array类型的方法
2018/04/11 Python
Python3实现的简单验证码识别功能示例
2018/05/02 Python
把csv文件转化为数组及数组的切片方法
2018/07/04 Python
Python面向对象程序设计之类的定义与继承简单示例
2019/03/18 Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
2020/01/22 Python
Python unittest框架操作实例解析
2020/04/13 Python
如何用python开发Zeroc Ice应用
2021/01/29 Python
灵活运用CSS3特性绘制简易版围棋效果
2016/09/28 HTML / CSS
365 Tickets英国:全球景点门票
2019/07/06 全球购物
澳大利亚100%丝绸多彩度假装商店:TheSwankStore
2019/09/04 全球购物
alice McCALL官网:澳大利亚时尚品牌
2020/11/16 全球购物
干部鉴定材料
2014/05/18 职场文书
台风停课通知
2015/04/24 职场文书
保护动物的宣传语
2015/07/13 职场文书