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 轻松支持函数重载 (Part 1 - 设计)
Aug 04 Javascript
node.js中的path.isAbsolute方法使用说明
Dec 08 Javascript
js控制多图左右滚动切换效果代码分享
Aug 26 Javascript
全面解析Bootstrap布局组件应用
Feb 22 Javascript
详解angular中如何监控dom渲染完毕
Jan 03 Javascript
bootstrapValidator bootstrap-select验证不可用的解决办法
Jan 11 Javascript
Bootstrap风格的zTree右键菜单
Feb 17 Javascript
10个最优秀的Node.js MVC框架
Aug 24 Javascript
JS实现中文汉字按拼音排序的方法
Oct 09 Javascript
Vue全家桶实践项目总结(推荐)
Nov 04 Javascript
jquery实现下载图片功能
Jul 18 jQuery
vue3获取当前路由地址
Feb 18 Vue.js
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中可能用来加密字符串的函数[base64_encode、urlencode、sha1]
2012/01/16 PHP
PHP中extract()函数的妙用分析
2012/07/11 PHP
解析php通过cookies获取远程网页的指定代码
2013/06/25 PHP
PHP入门之常量简介和系统常量
2014/05/12 PHP
Yii框架实现多数据库配置和操作的方法
2017/05/25 PHP
javascript之水平横向滚动歌词同步的应用
2007/05/07 Javascript
一个javascript参数的小问题
2008/03/02 Javascript
js 多浏览器分别判断代码
2010/04/01 Javascript
基于jquery的网页SELECT下拉框美化代码
2010/10/28 Javascript
javascript如何判断输入的url是否正确
2014/04/11 Javascript
JS常用函数使用指南
2014/11/23 Javascript
Bootstrap实现下拉菜单效果
2016/04/29 Javascript
node.js express安装及示例网站搭建方法(分享)
2016/08/22 Javascript
JavaScript实现弹出广告功能
2017/03/30 Javascript
Vue.js数据绑定之data属性
2017/07/07 Javascript
详解用Webpack与Babel配置ES6开发环境
2019/03/12 Javascript
基于JavaScript判断两个对象内容是否相等
2020/01/10 Javascript
Vue3 实现双盒子定位Overlay的示例
2020/12/22 Vue.js
vuex的使用和简易实现
2021/01/07 Vue.js
Nodejs 数组的队列以及forEach的应用详解
2021/02/25 NodeJs
Python中还原JavaScript的escape函数编码后字符串的方法
2014/08/22 Python
Python编程实现数学运算求一元二次方程的实根算法示例
2017/04/02 Python
Python基于Socket实现的简单聊天程序示例
2017/08/05 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
2018/02/23 Python
神经网络(BP)算法Python实现及应用
2018/04/16 Python
Python将list中的string批量转化成int/float的方法
2018/06/26 Python
详解基于django实现的webssh简单例子
2018/07/17 Python
解决PySide+Python子线程更新UI线程的问题
2019/01/11 Python
详解DeBug Python神级工具PySnooper
2019/07/03 Python
基于Python和C++实现删除链表的节点
2020/07/06 Python
个人求职简历的自我评价
2013/10/19 职场文书
2014国庆节餐厅促销活动策划方案
2014/09/16 职场文书
2014年企业党支部工作总结
2014/12/04 职场文书
老员工辞职信范文
2015/05/12 职场文书
入党转正申请自我鉴定
2019/06/25 职场文书
2019年员工晋升管理制度范本!
2019/07/08 职场文书