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 相关文章推荐
用dom+xhtml+css制作的一个相册效果代码打包下载
Jan 24 Javascript
面向对象的Javascript之二(接口实现介绍)
Jan 27 Javascript
JS 在指定数组中随机取出N个不重复的数据
Jun 10 Javascript
使用js获取图片原始尺寸
Dec 03 Javascript
Jquery简单实现GridView行高亮的方法
Jun 15 Javascript
WordPress中鼠标悬停显示和隐藏评论及引用按钮的实现
Jan 12 Javascript
Windows系统下安装Node.js的步骤图文详解
Nov 15 Javascript
Vue.js学习教程之列表渲染详解
May 17 Javascript
knockoutjs模板实现树形结构列表
Jul 31 Javascript
vue移动端微信授权登录插件封装的实例
Aug 28 Javascript
js嵌套的数组扁平化:将多维数组变成一维数组以及push()与concat()区别的讲解
Jan 19 Javascript
Vue 动态组件components和v-once指令的实现
Aug 30 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动态生成缩略图并输出显示的方法
2015/04/20 PHP
在CentOS系统上从零开始搭建WordPress博客的全流程记录
2016/04/21 PHP
ThinkPHP+EasyUI之ComboTree中的会计科目树形菜单实现方法
2017/06/09 PHP
一个非常实用的php文件上传类
2017/07/04 PHP
TP5框架简单登录功能实现方法示例
2019/10/31 PHP
基于PHP实现发微博动态代码实例
2020/12/11 PHP
JavaScript获取GridView中用户点击控件的行号,列号
2009/04/14 Javascript
js 覆盖和重载 函数
2009/09/25 Javascript
js 程序执行与顺序实现详解
2013/05/13 Javascript
查看大图功能代码jquery版
2013/11/05 Javascript
jQuery实现的向下图文信息滚动效果
2015/05/03 Javascript
学习JavaScript设计模式之中介者模式
2016/01/14 Javascript
教你JS中的运算符乘方、开方及变量格式转换
2016/08/09 Javascript
详谈jQuery中的一些正则匹配表达式
2017/03/08 Javascript
html中通过JS获取JSON数据并加载的方法
2017/11/30 Javascript
基于Vue的SPA动态修改页面title的方法(推荐)
2018/01/02 Javascript
p5.js入门教程和基本形状绘制
2018/03/15 Javascript
element-ui表格列金额显示两位小数的方法
2018/08/24 Javascript
在vue项目中引用Iview的方法
2018/09/14 Javascript
JS实现图片拖拽交换效果
2018/11/30 Javascript
解决微信小程序调用moveToLocation失效问题【超简单】
2019/04/12 Javascript
基于JS判断对象是否是数组
2020/01/10 Javascript
vue 通过绑定事件获取当前行的id操作
2020/07/27 Javascript
vue 数据双向绑定的实现方法
2021/03/04 Vue.js
Python发送email的3种方法
2015/04/28 Python
python 性能优化方法小结
2017/03/31 Python
人机交互程序 python实现人机对话
2017/11/14 Python
推荐8款常用的Python GUI图形界面开发框架
2020/02/23 Python
Pandas时间序列基础详解(转换,索引,切片)
2020/02/26 Python
keras导入weights方式
2020/06/12 Python
python批量处理多DNS多域名的nslookup解析实现
2020/06/28 Python
Matlab使用Plot函数实现数据动态显示方法总结
2021/02/25 Python
如何判断计算机可能已经中马
2013/03/22 面试题
班子群众路线教育实践个人对照检查材料思想汇报
2014/09/30 职场文书
2014年纠风工作总结
2014/12/08 职场文书
JS异步堆栈追踪之为什么await胜过Promise
2021/04/28 Javascript