Angular5.0 子组件通过service传递值给父组件的方法


Posted in Javascript onJuly 13, 2018

一、引言

我们使用ngx-loading,需要在app.component.html上写模板,绑定一个布尔值loading.此时如果我们想在其他组件中使用这个loading控件,就需要在每个组件的html重新写模板,这就显得累赘了。在此,我们以ngx-loading为例,展示子组件如何通过service改变app组件中的布尔值loading。

// app.component.html
 <ngx-loading [show]="loading" [config]="{ backdropBorderRadius: '14px' }"></ngx-loading>

二、实现

1.安装ngx-loading 详情点击

npm install --save ngx-loading

2.Import the LoadingModule

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { CoreModule } from './core/core.module';
import { LoadingModule } from 'ngx-loading';

@NgModule({
 //...
 imports: [
  //...
  LoadingModule
 ],
 //...
})
export class AppModule { }

3.在app.component.html写ngx-loading模板

// app.component.html
 <ngx-loading [show]="loading" [config]="{ backdropBorderRadius: '14px' }"></ngx-loading>

4.新建一个UtilsService

import {Injectable} from '@angular/core';
import {Subject} from 'rxjs/Subject';

@Injectable()
export class UtilsService {

 private loadingSource = new Subject();
 // 获得一个Observable;
 loadingObservable = this.loadingSource.asObservable();

 // 发射数据,当调用这个方法的时候,Subject就会发射这个数据,所有订阅了这个Subject的Subscription都会接受到结果
 // loading true为启用loading,false为关闭loading
 emitBoolean(loading: boolean) {
  this.loadingSource.next(loading);
 }
}

5.在app.component.ts使用subscribe来订阅,当数据被发射出来的时候,这里就会接收到结果

import {Component, OnDestroy, OnInit} from '@angular/core';
import {Subscription} from "rxjs/Subscription";
import {UtilsService} from "./service/utils.service";

@Component({
 selector: 'app-root',
 templateUrl: './app.component.html',
 styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit, OnDestroy {

 loading = false;
 subscription: Subscription;

 constructor(public utils: UtilsService) {
  // 使用subscribe来订阅,当数据被发射出来的时候,这里就会接收到结果
  this.subscription = this.utils.loadingObservable.subscribe(loading => this.loading = Boolean(loading));
 }

 ngOnInit() {
 }

 /* 销毁的时候需要取消订阅,因为订阅之后会一直处于观察者状态,不取消会导致泄露*/
 ngOnDestroy() {
  this.subscription.unsubscribe();
 }

}

6.在其他子组件需要启用或关闭loading时,只需要一行代码。

constructor( private utils: UtilsService) {

       }
this.utils.emitBoolean(true); // 启用loading
this.utils.emitBoolean(false); // 关闭loading

7.额外方法:在子组件注入AppComponent,简单粗暴,但不推荐……

constructor(public appComponent: AppComponent) {
  
 }
this.appComponent.loading = true; // 启用loading
this.appComponent.loading = false; // 关闭loading

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用户注册常用javascript代码
Aug 29 Javascript
基于JQuery 滑动与动画的说明介绍
Apr 18 Javascript
一个CSS+jQuery实现的放大缩小动画效果
Feb 19 Javascript
Javascript 实现复制(Copy)动作方法大全
Jun 20 Javascript
js获取字符串最后一位方法汇总
Nov 13 Javascript
详解plotly.js 绘图库入门使用教程
Feb 23 Javascript
vue+element-ui动态生成多级表头的方法
Aug 28 Javascript
详解react native页面间传递数据的几种方式
Nov 07 Javascript
详解三种方式解决vue中v-html元素中标签样式
Nov 22 Javascript
vue 解除鼠标的监听事件的方法
Nov 13 Javascript
js实现石头剪刀布游戏
Oct 11 Javascript
gojs实现蚂蚁线动画效果
Feb 18 Javascript
vue实现组件之间传值功能示例
Jul 13 #Javascript
微信小程序仿微信运动步数排行(交互)
Jul 13 #Javascript
jQuery实现监听下拉框选中内容发生改变操作示例
Jul 13 #jQuery
微信小程序中使用ECharts 异步加载数据实现图表功能
Jul 13 #Javascript
JS实现select选中option触发事件操作示例
Jul 13 #Javascript
AngularJs的UI组件ui-Bootstrap之Tooltip和Popover
Jul 13 #Javascript
详解Angular-ui-BootStrap组件的解释以及使用
Jul 13 #Javascript
You might like
php采集文章中的图片获取替换到本地(实现代码)
2013/07/08 PHP
PHP易混淆函数的区别及用法汇总
2014/11/22 PHP
2款PHP无限级分类实例代码
2015/11/11 PHP
Yii中CGridView禁止列排序的设置方法
2016/07/12 PHP
转一个日期输入控件,支持FF
2007/04/27 Javascript
Jquery 常用方法经典总结
2010/01/28 Javascript
文本框获得焦点和失去焦点的判断代码
2012/03/18 Javascript
JS 添加千分位与去掉千分位的示例
2013/07/11 Javascript
在jquery boxy中添加百度地图坐标拾取注意流程
2014/04/03 Javascript
深入理解JavaScript系列(44):设计模式之桥接模式详解
2015/03/04 Javascript
javascript实现完美拖拽效果
2015/05/06 Javascript
js仿腾讯QQ的web登陆界面
2016/08/19 Javascript
浅谈js中startsWith 函数不能在任何浏览器兼容的问题
2017/03/01 Javascript
jqueryUI tab标签页代码分享
2017/10/09 jQuery
手写Node静态资源服务器的实现方法
2018/03/20 Javascript
微信小程序用户位置权限的获取方法(拒绝后提醒)
2018/11/15 Javascript
react实现移动端下拉菜单的示例代码
2020/01/16 Javascript
解决vue刷新页面以后丢失store的数据问题
2020/08/11 Javascript
Vue+Java+Base64实现条码解析的示例
2020/09/23 Javascript
关于小程序优化的一些建议(小结)
2020/12/10 Javascript
分享Python文本生成二维码实例
2016/01/06 Python
基于python批量处理dat文件及科学计算方法详解
2018/05/08 Python
Python2和Python3中@abstractmethod使用方法
2020/02/04 Python
基于Python和C++实现删除链表的节点
2020/07/06 Python
如何将Pycharm中调整字体大小的方式设置为&quot;ctrl+鼠标滚轮上下滑&quot;
2020/11/17 Python
html5 Canvas画图教程(3)—canvas出现1像素线条模糊不清的原因
2013/01/09 HTML / CSS
MAC彩妆英国官网:M·A·C UK
2018/05/30 全球购物
纽约和芝加哥当天送花:Ode à la Rose
2019/07/05 全球购物
Hashtable 添加内容的方式有哪几种,有什么区别?
2012/04/08 面试题
函授毕业自我鉴定
2013/12/19 职场文书
关于运动会的广播稿
2014/09/22 职场文书
抗洪救灾感谢信
2015/01/22 职场文书
社会实践心得体会范文
2016/01/14 职场文书
2016大学生优秀志愿者事迹材料
2016/02/25 职场文书
python实现简单的井字棋
2021/05/26 Python
vue中 this.$set的使用详解
2021/11/17 Vue.js