Angular2父子组件之间数据传递:父子组件共享服务通信
来源:互联网 发布:百度关键词优化 编辑:程序博客网 时间:2024/06/14 03:40
父子组件共享同一个服务,利用该服务实现双向通信
首先定义服务:
parentService.ts(服务)
import {Injectable} from "@angular/core"
@Injectable()
export class ParentService {
name: string = "小明";
getData() {
return this.name;
}
}
(1).这里用Injectable修饰这个类是一个服务,在其他用到地方只需要注入使用
(2).我们还定义了一个name变量并且初始化值,和一个公共的方法getData
parent.module.ts(模块)
import {NgModule} from '@angular/core';
import {CommonModule} from '@angular/common';
import {FormsModule} from '@angular/forms';
import {ParentComponent} from './parent.component';
import {ChildenComponent} from './childen/childen.component'
import {ParentService} from './parent.service'
@NgModule({
imports: [CommonModule, FormsModule],
exports: [ParentComponent],
declarations: [ParentComponent, ChildenComponent],
providers: [ParentService]
})
export class ParentModule {
}
我们这里把刚才创建的parentService服务依赖加进来,接着在provides中注册这个parentService服务,在ParentModule模块中注册之后,对于父组件和子组件来说都是指向同一个服务实例,而且这个服务的作用域只在当前这个模块中有效,这句话理解了,就等于理解了父子组件共享服务实现数据通信
在父组件中使用服务
parent.component.ts(父组件)
import {Component} from '@angular/core';
import {ParentService} from './parent.service';
@Component({
selector: 'app-parent',
templateUrl: './parent.component.html',
styleUrls: ['./parent.component.css'],
})
export class ParentComponent {
constructor(public parentService: ParentService) {
}
OnClick() {
let a = this.parentService.getData();
alert(a);
}
}
导入parentService服务,在构造函数中声明注入parentService服务,因为我们在parentModule模块中,已经将parentService 通过provides注册过,所以我们在组件中不需要进行注册,直接可以使用,你可以这样理解,把当它想象成在模块的容器中已经存在了,只需要从容器中拿出来使用。
(1).这里我们定义了一个OnClick()方法,当页面点击事件触发,就会来调用parentService服务定义的方法getData()获取返回值,弹出返回值。
对应的父组件模版是这样的
<div class="parent_div">
<p>父组件</p>
<div>
<input type="button" value="父组件调用服务方法" (click)="OnClick()">
</div>
<!---子组件指令 start-->
<app-childen></app-childen>
<!---子组件指令 end-->
</div>
最终效果
在子组件中使用服务
因为共享的是同一个ParentService服务实例,所以我们在子组件中也可以调用个ParentService服务的方法,代码同上面用一样
childen.component.ts(子组件)
import {Component} from '@angular/core';
import {ParentService} from '../parent.service'
@Component({
selector: 'app-childen',
templateUrl: './childen.component.html',
styleUrls: ['./childen.component.css']
})
export class ChildenComponent {
constructor(private parentService: ParentService) {
}
fun1() {
let a = this.parentService.getData();
alert(a);
}
}
这里同样定义了一个方法,用于测试调用parentService服务,代码实现跟上面一样,不在描述,对应的子组件模版
<div class="childen-box">
<p>子组件</p>
<div>
<input type="button" value="子组件调用服务方法" (click)="fun1()">
</div>
</div>
最终效果:
个人学习心得,大神路过 ,不喜勿喷
有问题加我微信提问或者留言
- Angular2父子组件之间数据传递:父子组件共享服务通信
- Angular2父子组件之间数据传递:父子组件共享服务通信
- Angular2父子组件之间数据传递:@ViewChild获取子组件
- Angular2父子组件之间数据传递:@Input和@Output (上)
- Angular2父子组件之间数据传递:@Input和@Output (下)
- angular2中父子组件的数据传递
- angular2.0父子组件通信---如何通过组件属性将数据传递给子组件
- angular2 父子组件的通信
- Angular2父子组件之间数据传递:局部变量获取子组件
- vue 父子组件之间的数据传递
- angular2 父子组件数据传递之@Input和@Output详解
- angular2父子组件的数据传递,父组件向子组件传递数据
- 父子组件之间的通信
- Angular2实现父子组件通信(详解)
- angular2父子组件的数据传递,子组件向父组件抛出数据
- Vue2.0 父子组件之间通信
- vue父子组件之间的通信
- 总结vue父子组件之间的通信
- 将django rest 与 mongodb结合起来
- 标签和表单
- 面试的时候记得A(B,a)吧
- Angular2父子组件之间数据传递:局部变量获取子组件
- 微信小程序开发系列——5.前端页面开发
- Angular2父子组件之间数据传递:父子组件共享服务通信
- CentOS制作ISO系统镜像笔记
- 【简记】Java Web 内幕——Spring基本概念+基本配置操作
- windows 远程桌面连接 kali linux
- 用时间函数生成随机数
- Angular2父子组件之间数据传递:@ViewChild获取子组件
- 工作线程数究竟要设置为多少 | 架构师之路
- 单元测试
- mysql的存储过程