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 相关文章推荐
Extjs4中Form的使用之本地hiddenfield
Nov 26 Javascript
Vuejs第十篇之vuejs父子组件通信
Sep 06 Javascript
AngularJS实现树形结构(ztree)菜单示例代码
Sep 18 Javascript
微信小程序 rpx 尺寸单位详细介绍
Oct 13 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的方法
Nov 29 Javascript
vue2.0 keep-alive最佳实践
Jul 06 Javascript
微信小程序简单实现form表单获取输入数据功能示例
Nov 30 Javascript
详解自定义ajax支持跨域组件封装
Feb 08 Javascript
详解Node 定时器
Feb 26 Javascript
cnpm加速Angular项目创建的方法
Sep 07 Javascript
elementUI Tree 树形控件的官方使用文档
Apr 25 Javascript
解决VueCil代理本地proxytable无效报错404的问题
Nov 07 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
ThinkPHP的L方法使用简介
2014/06/18 PHP
Yii使用ajax验证显示错误messagebox的解决方法
2014/12/03 PHP
PHP获取昨天、今天及明天日期的方法
2016/02/03 PHP
jquery 3D球状导航的文章分类
2010/07/06 Javascript
基于jquery的finkyUI插件与Ajax实现页面数据加载功能
2010/12/03 Javascript
JS重要知识点小结
2011/11/06 Javascript
js使浏览器窗口最大化实现代码(适用于IE)
2013/08/07 Javascript
JQuery中extend的用法实例分析
2015/02/08 Javascript
php利用curl获取远程图片实现方法
2015/10/26 Javascript
利用Angularjs中模块ui-route管理状态的方法
2016/12/27 Javascript
以BootStrap Tab为例写一个前端组件
2017/07/25 Javascript
Vue2.0 给Tab标签页和页面切换过渡添加样式的方法
2018/03/13 Javascript
vue解决使用webpack打包后keep-alive不生效的方法
2018/09/01 Javascript
可能被忽略的一些JavaScript数组方法细节
2019/02/28 Javascript
微信小程序 slot踩坑的解决
2019/04/01 Javascript
微信小程序文字显示换行问题
2019/07/28 Javascript
Node.js学习教程之Module模块
2019/09/03 Javascript
微信小程序tab切换可滑动切换导航栏跟随滚动实现代码
2019/09/04 Javascript
JS动态图片的实现方法完整示例
2020/01/13 Javascript
微信小程序淘宝首页双排图片布局排版代码(推荐)
2020/10/29 Javascript
python完成FizzBuzzWhizz问题(拉勾网面试题)示例
2014/05/05 Python
Python中字典的基本知识初步介绍
2015/05/21 Python
python skimage 连通性区域检测方法
2018/06/21 Python
pygame游戏之旅 计算游戏中躲过的障碍数量
2018/11/20 Python
pycharm打开命令行或Terminal的方法
2019/01/16 Python
python tkinter实现彩球碰撞屏保
2019/07/30 Python
Anaconda+Pycharm环境下的PyTorch配置方法
2020/03/13 Python
Python中过滤字符串列表的方法
2020/12/22 Python
最好的意大利皮夹克:D’Arienzo
2018/12/04 全球购物
Ootori在线按摩椅店:一家专业的按摩椅制造商
2019/04/10 全球购物
信息部岗位职责
2013/11/12 职场文书
日语求职信范文
2013/12/17 职场文书
公司司机岗位职责
2014/02/07 职场文书
销售经理岗位职责
2015/01/31 职场文书
2015年数学教研组工作总结
2015/05/23 职场文书
居安思危观后感
2015/06/11 职场文书