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 07 Javascript
jquery 插件学习(四)
Aug 06 Javascript
JS中的prototype与面向对象的实例讲解
May 22 Javascript
纯js写的分页表格数据为json串
Feb 18 Javascript
jquery插件jSignature实现手动签名
May 04 Javascript
js实现汉字排序的方法
Jul 23 Javascript
jquery根据td给相同tr下其他td赋值的实现方法
Oct 05 Javascript
JavaScript基于扩展String实现替换字符串中index处字符的方法
Jun 13 Javascript
vue.js 微信支付前端代码分享
Feb 10 Javascript
AngularJS对动态增加的DOM实现ng-keyup事件示例
Mar 12 Javascript
Vue 进阶之路(三)
Apr 18 Javascript
koa2 数据api中间件设计模型的实现方法
Jul 13 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生成WAP页面
2006/10/09 PHP
PHP图片裁剪函数(保持图像不变形)
2014/05/04 PHP
PHP抽奖算法程序代码分享
2015/10/08 PHP
php版微信公众平台接口开发之智能回复开发教程
2016/09/22 PHP
PHP实现随机发扑克牌
2020/04/22 PHP
Jquery UI震动效果实现原理及步骤
2013/02/04 Javascript
html页面显示年月日时分秒和星期几的两种方式
2013/08/20 Javascript
禁止页面刷新让F5快捷键及右键都无效
2014/01/22 Javascript
js调试系列 初识控制台
2014/06/18 Javascript
node.js中的fs.truncate方法使用说明
2014/12/15 Javascript
jquery仿百度百科底部浮动导航特效
2015/08/08 Javascript
javascript for-in有序遍历json数据并探讨各个浏览器差异
2015/11/30 Javascript
JavaScript学习总结之JS、AJAX应用
2016/01/29 Javascript
字符串反转_JavaScript
2016/04/28 Javascript
原生JS实现在线问卷调查投票特效
2017/01/03 Javascript
less简单入门(CSS 预处理语言)
2017/03/08 Javascript
详解React 16 中的异常处理
2017/07/28 Javascript
ReactNative 之FlatList使用及踩坑封装总结
2017/11/29 Javascript
js实现购物车功能
2018/06/12 Javascript
vue项目打包后打开页面空白解决办法
2018/06/29 Javascript
详解如何快速配置webpack多入口脚手架
2018/12/28 Javascript
JS如何定义用字符串拼接的变量
2020/07/11 Javascript
Python实现的数据结构与算法之快速排序详解
2015/04/22 Python
Jupyter加载文件的实现方法
2020/04/14 Python
Smallable英国家庭概念店:设计师童装及家居装饰
2017/07/05 全球购物
美国在线家居装饰店:Belle&June
2018/10/24 全球购物
Columbia Sportswear法国官网:全球户外品牌
2020/09/25 全球购物
27个经典Linux面试题及答案,你知道几个?
2014/03/11 面试题
建筑项目策划书
2014/01/13 职场文书
团干部培训方案
2014/06/03 职场文书
领导班子党的群众路线教育实践活动对照检查材料
2014/09/25 职场文书
卫校毕业生自我鉴定
2014/09/28 职场文书
个人房屋买卖协议书(范本)
2014/10/04 职场文书
机关作风整顿个人剖析材料
2014/10/06 职场文书
MySQL系列之八 MySQL服务器变量
2021/07/02 MySQL
php去除数组中为0的元素的实例分析
2021/11/17 PHP