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 相关文章推荐
JQuery 返回布尔值Is()条件判断方法代码
May 14 Javascript
JavaScript中按位“异或”运算符使用介绍
Mar 14 Javascript
js实现简单折叠、展开菜单的方法
Aug 28 Javascript
jquery实现可点击伸缩与展开的菜单效果代码
Aug 31 Javascript
分离与继承的思想实现图片上传后的预览功能:ImageUploadView
Apr 07 Javascript
基于BootStrap Metronic开发框架经验小结【九】实现Web页面内容的打印预览和保存操作
May 12 Javascript
bootstrap table操作技巧分享
Feb 15 Javascript
JavaScript实现星星等级评价功能
Mar 22 Javascript
基于JavaScript实现验证码功能
Apr 01 Javascript
jQuery仿移动端支付宝键盘的实现代码
Aug 15 jQuery
JS数组进阶示例【数组的几种函数用法】
Jan 16 Javascript
原生JavaScript实现购物车
Jan 10 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
咖啡常见的种类
2021/03/03 新手入门
深入PHP许愿墙模块功能分析
2013/06/25 PHP
javascript 建设银行登陆键盘
2008/06/10 Javascript
运用jquery实现table单双行不同显示并能单行选中
2009/07/25 Javascript
JavaScript高级程序设计 阅读笔记(十三) js定义类或对象
2012/08/14 Javascript
JS实现标签页效果(配合css)
2013/04/03 Javascript
Table冻结表头示例代码
2013/08/20 Javascript
jquery渐隐渐显的图片幻灯闪烁切换实现方法
2015/02/26 Javascript
JavaScript实现信用卡校验方法
2015/04/07 Javascript
超赞的动手创建JavaScript框架的详细教程
2015/06/30 Javascript
AngularJS基础 ng-csp 指令详解
2016/08/01 Javascript
js 单引号替换成双引号,双引号替换成单引号的实现方法
2017/02/16 Javascript
javascript遍历json对象的key和任意js对象属性实例
2017/03/09 Javascript
vue.js实现含搜索的多种复选框(附源码)
2017/03/23 Javascript
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
2017/04/03 jQuery
nodejs爬虫遇到的乱码问题汇总
2017/04/07 NodeJs
详解vue+webpack+express中间件接口使用
2018/07/17 Javascript
JS数组splice操作实例分析
2019/10/12 Javascript
JS面向对象之单选框实现
2020/01/17 Javascript
在vue中使用eslint,配合vscode的操作
2020/11/09 Javascript
[03:20]次级联赛厮杀超职业 现超级兵对拆世纪大战
2014/10/30 DOTA
[01:04:39]OG vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python选择排序算法的实现代码
2013/11/21 Python
Python使用MONGODB入门实例
2015/05/11 Python
Python搭建代理IP池实现检测IP的方法
2019/10/27 Python
关于ResNeXt网络的pytorch实现
2020/01/14 Python
Pyqt5 关于流式布局和滚动条的综合使用示例代码
2020/03/24 Python
墨尔本最受欢迎的复古风格品牌:Princess Highway
2018/12/21 全球购物
革命先烈的英雄事迹材料
2014/02/15 职场文书
中药学专业求职信
2014/05/31 职场文书
2014党员批评和自我批评思想汇报
2014/09/21 职场文书
面试复试通知单
2015/04/24 职场文书
2015年会计年终工作总结
2015/05/26 职场文书
演讲开场白台词大全
2015/05/29 职场文书
pyqt5蒙版遮罩mask,setmask的使用
2021/06/11 Python
Python中的matplotlib绘制百分比堆叠柱状图,并为每一个类别设置不同的填充图案
2022/04/20 Python