angular2 父子组件的通信
2017-02-12 14:30
369 查看
最近感觉对angular2的使用方法总结的太少了,稍微梳理了组件通信的相关内容,在此记录一下:
1.通过数据绑定的方式---这种方式有单向和双向的两种,即父组件->子组件,和父组件<->子组件,首先说一下第一种情况:
第一种(父组件->子组件):
在父组件使用自定义的指令,如<myCustomComponent [pass]='myPassValue' ></myCustomComponent>;
然后在子组件中通过Input方法,即可将数据获取到;
第二种(父组件<->子组件):
这种方式只需在父组件中使用双向绑定<myCustomComponent [(pass)]='myPassValue' ></myCustomComponent>;
然后在子组件中通过Output,可以定义一个EventEmitter的变量childValue,将childValue.emit()即可;
2.angular2提供了父组件访问子组件属性和方法的机制,不通过数据绑定的方式,完成父组件对子组件的属性和方法的访问控制:
一种是通过父组件的模板:
使用本地变量的方式访问(这个方式父组件的类是获取不到子组件的属性和方法),
使用方法为在父组件中定义本地变量myLoaclpara,<myCustomComponent
#myLoaclpara></myCustomComponent>;
然后就可以在模板中使用myLoaclpara访问子组件的属性和方法了
<h2>{{myLoaclpara.childValue}}</h2>
<button
(click)="myLoaclpara.childFunction()"></button>
第二种是在父组件中使用ViewChild:
在父组件中通过ViewChild把子组件引入,然后创建一个子组件的实例,使用这个实例就可以在父组件的类中访问子组件的属性和方法,
private
childComponent:ChildComponent;
使用childComponent即可访问子组件的属性和方法;
3.还有一种是通过访问来实现通信,简单的描述就是通过中间的服务作为媒介,实现子组件和父组件的通信,注意一点就是,这个服务要处于最顶层,相当于全局变量,使用时要谨慎。
这个方法就是使用rxjs的一个类库Subject,应用方法也很简单:(以TS举例)
定义通信模块communicate.ts
import Subject from Rxjs;
public subject: Subject;
public submitMessage(data: any){
this.subject.next(data);
}
export class
Communicate(){}
定义发送消息模块client.ts
public subject:
Communicate;//实例化Communicate
this.subject.submitMessage(mydate);//这样就可以把数据发射出去
定义接受消息模块server.ts
public subject:
Communicate;//实例化Communicate
this.subject.subscribe((res)=>{
//这里就是发射出去的数据
console.log(res);
});
1.通过数据绑定的方式---这种方式有单向和双向的两种,即父组件->子组件,和父组件<->子组件,首先说一下第一种情况:
第一种(父组件->子组件):
在父组件使用自定义的指令,如<myCustomComponent [pass]='myPassValue' ></myCustomComponent>;
然后在子组件中通过Input方法,即可将数据获取到;
第二种(父组件<->子组件):
这种方式只需在父组件中使用双向绑定<myCustomComponent [(pass)]='myPassValue' ></myCustomComponent>;
然后在子组件中通过Output,可以定义一个EventEmitter的变量childValue,将childValue.emit()即可;
2.angular2提供了父组件访问子组件属性和方法的机制,不通过数据绑定的方式,完成父组件对子组件的属性和方法的访问控制:
一种是通过父组件的模板:
使用本地变量的方式访问(这个方式父组件的类是获取不到子组件的属性和方法),
使用方法为在父组件中定义本地变量myLoaclpara,<myCustomComponent
#myLoaclpara></myCustomComponent>;
然后就可以在模板中使用myLoaclpara访问子组件的属性和方法了
<h2>{{myLoaclpara.childValue}}</h2>
<button
(click)="myLoaclpara.childFunction()"></button>
第二种是在父组件中使用ViewChild:
在父组件中通过ViewChild把子组件引入,然后创建一个子组件的实例,使用这个实例就可以在父组件的类中访问子组件的属性和方法,
@ViewChild(ChildComponent)
;
private
childComponent:ChildComponent;
使用childComponent即可访问子组件的属性和方法;
3.还有一种是通过访问来实现通信,简单的描述就是通过中间的服务作为媒介,实现子组件和父组件的通信,注意一点就是,这个服务要处于最顶层,相当于全局变量,使用时要谨慎。
这个方法就是使用rxjs的一个类库Subject,应用方法也很简单:(以TS举例)
定义通信模块communicate.ts
import Subject from Rxjs;
public subject: Subject;
public submitMessage(data: any){
this.subject.next(data);
}
export class
Communicate(){}
定义发送消息模块client.ts
public subject:
Communicate;//实例化Communicate
this.subject.submitMessage(mydate);//这样就可以把数据发射出去
定义接受消息模块server.ts
public subject:
Communicate;//实例化Communicate
this.subject.subscribe((res)=>{
//这里就是发射出去的数据
console.log(res);
});
相关文章推荐
- Angular2 父子组件数据通信实例
- Angular2 父子组件通信方式的示例
- vue开发:vue2.0父子组件及非父子组件之间的通信方法
- Vue之父子兄弟组件间通信
- 总结vue父子组件之间的通信
- vue父子组件之间的通信
- Vue 组件 非父子组件通信
- vue项目中v-model父子组件通信的实现详解
- VUE2.0父子组件以及非父子组件通信传参详解
- vue 父子组件之间的通信 props
- Angular 2父子组件之间共享服务通信的实现
- Vuejs第十篇之vuejs父子组件通信
- vue非父子组件通信问题解决记录
- vuejs父子组件通信的问题
- Vue.js-----轻量高效的MVVM框架(十、父子组件通信)
- vue2.0父子组件以及非父子组件如何通信
- vue2.0父子组件及非父子组件通信
- 非父子组件通信-$on和$emit
- vue2.0父子组件以及非父子组件如何通信
- vue中的event bus非父子组件通信