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 日期对象Date扩展方法
May 30 Javascript
Extjs4 类的定义和扩展实例
Jun 28 Javascript
我的Node.js学习之路(三)--node.js作用、回调、同步和异步代码 以及事件循环
Jul 06 Javascript
多个jQuery版本共存的处理方案
Mar 17 Javascript
js基于cookie方式记住返回页面用法示例
May 27 Javascript
js实现增加数字显示的环形进度条效果
Feb 05 Javascript
angular实现IM聊天图片发送实例
May 08 Javascript
React-Native之定时器Timer的实现代码
Oct 04 Javascript
使用 Node.js 开发资讯爬虫流程
Jan 07 Javascript
原生JavaScript实现todolist功能
Mar 02 Javascript
JS使用canvas中的measureText方法测量字体宽度示例
Feb 02 Javascript
JavaScript回调函数callback用法解析
Jan 14 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 使用file_get_contents读取大文件的方法
2014/11/13 PHP
PHP中Session可能会引起并发问题
2015/06/26 PHP
php blowfish加密解密算法
2016/07/02 PHP
JavaScript Event学习第十一章 按键的检测
2010/02/10 Javascript
Jquery提交表单 Form.js官方插件介绍
2012/03/01 Javascript
多个$(document).ready()的执行顺序实例分析
2014/07/26 Javascript
javascript动画算法实例分析
2015/07/31 Javascript
JS实现简单的tab切换选项卡效果
2016/09/21 Javascript
jquery获取input type=text中的值的各种方式(总结)
2016/12/02 Javascript
AngularJS指令与指令之间的交互功能示例
2016/12/14 Javascript
jQuery表格的维护和删除操作
2017/02/03 Javascript
Bootstrap的Carousel配合dropload.js实现移动端滑动切换图片
2017/03/10 Javascript
vue loadmore组件上拉加载更多功能示例代码
2017/07/19 Javascript
JS运动特效之同时运动实现方法分析
2018/01/24 Javascript
js实现移动端图片滑块验证功能
2020/09/29 Javascript
[01:09]DOTA2次级职业联赛 - 99战队宣传片
2014/12/01 DOTA
编写Python脚本来获取mp3文件tag信息的教程
2015/05/04 Python
Python使用sort和class实现的多级排序功能示例
2018/08/15 Python
python通过配置文件共享全局变量的实例
2019/01/11 Python
Python学习笔记之读取文件、OS模块、异常处理、with as语法示例
2019/06/04 Python
python os.rename实例用法详解
2020/12/06 Python
python 统计list中各个元素出现的次数的几种方法
2021/02/20 Python
实例教程 HTML5 Canvas 超炫酷烟花绽放动画实现代码
2014/11/05 HTML / CSS
英国天然保健品网站:Simply Supplements
2017/03/22 全球购物
法国大使拉杆箱官网:DELSEY Paris
2018/03/20 全球购物
沃达丰英国有限公司:Vodafone英国
2019/04/16 全球购物
加州风格的游泳和沙滩装品牌:Cupshe
2019/06/10 全球购物
印度在线购买电子产品网站:Croma
2020/01/02 全球购物
进程的查看和调度分别使用什么命令
2013/12/14 面试题
电力安全事故反思
2014/04/27 职场文书
银行进社区活动总结
2014/07/07 职场文书
爱护公物主题班会
2015/08/17 职场文书
2016党风廉政建设心得体会范文
2016/01/25 职场文书
Python排序算法之插入排序及其优化方案详解
2021/06/11 Python
SpringAop日志找不到方法的处理
2021/06/21 Java/Android
TV动画《政宗君的复仇》第二季制作决定PV公布
2022/04/02 日漫