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方法和技巧大全
Dec 27 Javascript
JS 文件本身编码转换 图文教程
Oct 12 Javascript
js过滤数组重复元素的方法
Sep 05 Javascript
namespace.js Javascript的命名空间库
Oct 11 Javascript
checkbox设置复选框的只读效果不让用户勾选
Aug 12 Javascript
html5+javascript制作简易画板附图
Apr 25 Javascript
JavaScript中的数学运算介绍
Dec 29 Javascript
浅谈JavaScript字符串与数组
Jun 03 Javascript
javascript原型模式用法实例详解
Jun 04 Javascript
原生JavaScript实现的无缝滚动功能详解
Jan 17 Javascript
JavaScript实现优先级队列
Dec 06 Javascript
Vue OpenLayer测距功能的实现
Apr 20 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实现的封装验证码类详解
2013/06/18 PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
2017/02/09 PHP
实例讲解PHP页面静态化
2018/02/05 PHP
javascript 面向对象继承
2009/11/26 Javascript
类似GMAIL的Ajax信息反馈显示
2010/02/16 Javascript
JS图片无缝滚动(简单利于使用)
2013/06/17 Javascript
node.js实现BigPipe详解
2014/12/05 Javascript
JavaScript中消除闭包的一般方法介绍
2015/03/16 Javascript
完美JQuery图片切换效果的简单实现
2016/07/21 Javascript
判断js的Array和Object的实现方法
2016/08/29 Javascript
vue.js删除动态绑定的radio的指定项
2017/06/02 Javascript
vue component组件使用方法详解
2017/07/14 Javascript
Cocos2d实现刮刮卡效果
2018/12/20 Javascript
layui-select动态选中值的例子
2019/09/23 Javascript
详解JS深拷贝与浅拷贝
2020/08/04 Javascript
[02:10]2018DOTA2亚洲邀请赛赛前采访-Liquid
2018/04/03 DOTA
[01:20]PWL开团时刻DAY9——听说潮汐没用?
2020/11/10 DOTA
Python实现远程调用MetaSploit的方法
2014/08/22 Python
Python文件及目录操作实例详解
2015/06/04 Python
python使用Apriori算法进行关联性解析
2017/12/21 Python
Python制作词云的方法
2018/01/03 Python
django中的HTML控件及参数传递方法
2018/03/20 Python
python修改txt文件中的某一项方法
2018/12/29 Python
python3读取csv文件任意行列代码实例
2020/01/13 Python
Html5移动端获奖无缝滚动动画实现示例
2018/06/25 HTML / CSS
.NET初级开发工程师面试题
2014/04/18 面试题
学年自我鉴定范文
2013/10/01 职场文书
护理自我鉴定范文
2013/10/06 职场文书
入党申请人的自我鉴定
2013/12/01 职场文书
学习党章思想汇报
2014/01/07 职场文书
品质保证书格式
2015/02/28 职场文书
阿甘正传观后感
2015/06/01 职场文书
入党积极分子半年考察意见
2015/06/02 职场文书
关于幸福的感言
2015/08/03 职场文书
MySQL触发器的使用
2021/05/24 MySQL
解决pytorch 损失函数中输入输出不匹配的问题
2021/06/05 Python