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 时间函数应用加、减、比较、格式转换的示例代码
Aug 23 Javascript
JavaScript将数组转换成CSV格式的方法
Mar 19 Javascript
javascript常用经典算法实例详解
Nov 25 Javascript
JS实现改变HTML上文字颜色和内容的方法
Dec 30 Javascript
非常实用的vue导航钩子
Mar 20 Javascript
jQuery创建及操作xml格式数据示例
May 26 jQuery
Vue实现简易翻页效果源码分享
Nov 08 Javascript
详解Vue实战指南之依赖注入(provide/inject)
Nov 13 Javascript
mockjs+vue页面直接展示数据的方法
Dec 19 Javascript
vue实现todolist基本功能以及数据存储功能实例详解
Apr 11 Javascript
element中el-container容器与div布局区分详解
May 13 Javascript
vue实现一个获取按键展示快捷键效果的Input组件
Jan 13 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 将图片按创建时间进行分类存储的实现代码
2010/01/05 PHP
PHP 网络开发详解之远程文件包含漏洞
2010/04/25 PHP
解析PHP实现多进程并行执行脚本
2013/06/18 PHP
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
2014/04/29 PHP
浅析PHP程序设计中的MVC编程思想
2014/07/28 PHP
腾讯微博提示missing parameter errorcode 102 错误的解决方法
2014/12/22 PHP
PHP中函数gzuncompress无法使用的解决方法
2017/03/02 PHP
Yii2 如何在modules中添加验证码的方法
2017/06/19 PHP
php curl优化下载微信头像的方法总结
2018/09/07 PHP
js获取指定的cookie的具体实现
2014/02/20 Javascript
使用不同的方法结合/合并两个JS数组
2014/09/18 Javascript
jquery中show()、hide()和toggle()用法实例
2015/01/15 Javascript
JavaScript去除数组里重复值的方法
2015/07/13 Javascript
实例详解AngularJS实现无限级联动菜单
2016/01/15 Javascript
AngularJs IE Compatibility 兼容老版本IE
2016/09/01 Javascript
AnjularJS中$scope和$rootScope的区别小结
2016/09/18 Javascript
Js动态设置rem来实现移动端字体的自适应代码
2016/10/14 Javascript
深入理解AngularJs-scope的脏检查(一)
2017/06/19 Javascript
jQuery选择器特殊字符与属性空格问题
2017/08/14 jQuery
vue 使某个组件不被 keep-alive 缓存的方法
2018/09/21 Javascript
vue实现购物车选择功能
2020/01/10 Javascript
详解Python 模拟实现生产者消费者模式的实例
2017/08/10 Python
Python3操作Excel文件(读写)的简单实例
2019/09/02 Python
执行Django数据迁移时报 1091错误及解决方法
2019/10/14 Python
CSS3实现千变万化的文字阴影text-shadow效果设计
2016/04/26 HTML / CSS
Skyscanner澳大利亚:全球领先的旅游搜索网站
2018/03/24 全球购物
澳大利亚运动鞋零售商:The Athlete’s Foot
2018/11/04 全球购物
法人代表授权委托书
2014/04/08 职场文书
营业用房租赁协议书
2014/11/26 职场文书
物业工程部主管岗位职责
2015/04/16 职场文书
2015年社区科普工作总结
2015/05/13 职场文书
青涩记忆观后感
2015/06/18 职场文书
保险公司2016开门红口号集锦
2015/12/24 职场文书
医院岗前培训心得体会
2016/01/08 职场文书
500字作文之难忘的同学
2019/12/20 职场文书
php png失真的原因及解决办法
2021/10/24 PHP