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中的对象化编程
Jan 16 Javascript
Extjs 几个方法的讨论
Jan 28 Javascript
javascript学习笔记(七)利用javascript来创建和存储cookie
Apr 08 Javascript
Javascript中的for in循环和hasOwnProperty结合使用
Jun 05 Javascript
javascript实现文字图片上下滚动的具体实例
Jun 28 Javascript
laytpl 精致巧妙的JavaScript模板引擎
Aug 29 Javascript
jquery 将当前时间转换成yyyymmdd格式的实现方法
Jun 01 Javascript
JavaScript实现自动切换图片代码
Oct 11 Javascript
bootstrap实现的自适应页面简单应用示例
Mar 09 Javascript
angularjs中使用ng-bind-html和ng-include的实例
Apr 28 Javascript
详解npm 配置项registry修改为淘宝镜像
Sep 07 Javascript
详解javascript脚本何时会被执行
Feb 05 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
玩家交还《星际争霸》原始码光盘 暴雪报以厚礼
2017/05/05 星际争霸
强烈推荐:php.ini中文版(1)
2006/10/09 PHP
php截取后台登陆密码的代码
2012/05/05 PHP
解析php中eclipse 用空格替换 tab键
2013/06/24 PHP
PHP中单引号与双引号的区别分析
2014/08/19 PHP
PHP设计模式之适配器模式代码实例
2015/05/11 PHP
Smarty日期时间操作方法示例
2016/11/15 PHP
js 获取和设置css3 属性值的实现方法
2013/05/06 Javascript
alert和confirm功能介绍
2014/05/21 Javascript
JS禁用页面上所有控件的实现方法(附demo源码下载)
2015/12/17 Javascript
js 原型对象和原型链理解
2017/02/09 Javascript
javascript数据结构之串的概念与用法分析
2017/04/12 Javascript
vue框架下部署上线后刷新报404问题的解决方案(推荐)
2019/04/03 Javascript
Vue中用JSON实现刷新界面不影响倒计时
2020/10/26 Javascript
vue+Element-ui实现分页效果
2020/11/15 Javascript
详解阿里Node.js技术文档之process模块学习指南
2021/01/04 Javascript
Python 不同对象比较大小示例探讨
2014/08/21 Python
理解Python中的类与实例
2015/04/27 Python
Python中的默认参数详解
2015/06/24 Python
python基础知识小结之集合
2015/11/25 Python
Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例
2018/02/13 Python
遗传算法python版
2018/03/19 Python
Python魔法方法详解
2019/02/13 Python
Python使用pymongo库操作MongoDB数据库的方法实例
2019/02/22 Python
Python Django框架防御CSRF攻击的方法分析
2019/10/18 Python
python中如何使用insert函数
2020/01/09 Python
Python实现队列的方法示例小结【数组,链表】
2020/02/22 Python
浅谈pandas.cut与pandas.qcut的使用方法及区别
2020/03/03 Python
Python2.x与3​​.x版本有哪些区别
2020/07/09 Python
详解HTML5中download属性的应用
2015/08/06 HTML / CSS
什么是三层交换,说说和路由的区别在那里
2014/09/01 面试题
艺术专业大学生自我评价
2013/09/22 职场文书
党员承诺践诺书
2014/05/20 职场文书
走群众路线学习笔记
2014/11/06 职场文书
2015年物业管理工作总结
2015/04/23 职场文书
基石观后感
2015/06/12 职场文书