这里简单的记录本身在angular2中,使用组件通讯的一些方法。方便本身之后的使用。angular2
1、组件之间通讯的方式app
// child 组件 @Component({ selector: 'app-child', template: '', styles: [``] }) export class AppChildComponent implements OnInit { @Output() onVoted: EventEmitter<any> = new EventEmitter(); ngOnInit(): void { this.onVoted.emit(1); } } // parent 组件 @Component({ selector: 'app-parent', template: ` <app-child (onVoted)="onListen($event)"></app-child> `, styles: [``] }) export class AppParentComponent implements OnInit { ngOnInit(): void { throw new Error('Method not implemented.'); } onListen(data: any): void { console.log('TAG' + '---------->>>' + data); } } ps:很讨厌贴代码,太占空间了;
2.使用@ViewChild和@ViewChildren:this
// 子组件 @Component({ selector: 'app-child2', template: '', styles: [``] }) export class AppChildComponent2 implements OnInit { data = 1; ngOnInit(): void { } getData(): void { console.log('TAG' + '---------->>>' + 111); } }
// 父组件 @Component({ selector: 'app-parent2', template: ` <app-child></app-child> `, styles: [``] }) export class AppParentComponent2 implements OnInit { @ViewChild(AppChildComponent2) child: AppChildComponent2; ngOnInit(): void { this.child.getData(); // 父组件得到子组件方法 console.log('TAG'+'---------->>>'+this.child.data);// 父组件得到子组件属性 } }
3.使用服务Service进行通讯,即:两个组件同时注入某个服务:url
// 组件A @Component({ selector: 'app-a', template: '', styles: [``] }) export class AppComponentA implements OnInit { constructor(private message: MessageService) { } ngOnInit(): void { // 组件A发送消息3 this.message.sendMessage(3); const b = this.message.getMessage(); // 组件A接收消息; } }
// 组件B @Component({ selector: 'app-b', template: ` <app-a></app-a> `, styles: [``] }) export class AppComponentB implements OnInit { constructor(private message: MessageService) { } ngOnInit(): void { // 组件B得到消息 const a = this.message.getMessage(); this.message.sendMessage(5); // 组件B发送消息 } }
2、关于我本身的消息服务模块设计
// 消息中专服务 @Injectable() export class MessageService { private subject = new Subject<any>(); /** * content模块里面进行信息传输,相似广播 * @param type 发送的信息类型 * 1-你的信息 * 2-你的信息 * 3-你的信息 * 4-你的信息 * 5-你的信息 */ sendMessage(type: number) { console.log('TAG' + '---------->>>' + type); this.subject.next({type: type}); } /** * 发送图片信息 * @param src:图片地址 */ sendImages(src: string) { console.log('AG1' + '---------->>>' + src) this.subject.next({url: src}); } /** * 清理消息 */ clearMessage() { this.subject.next(); } /** * 得到消息 * @returns {Observable<any>} 返回消息监听 */ getMessage(): Observable<any> { return this.subject.asObservable(); } }
// 使用该服务的地方,须要注册MessageService服务; constructor(private message: MessageService) { } // 消息接受的地方; public subscription: Subscription; ngAfterViewInit(): void { this.subscription = this.message.getMessage().subscribe(msg => { // 根据msg,来处理你的业务逻辑。 }) } // 组件生命周期结束的时候,记得注销一下,否则会卡卡卡卡; ngOnDestroy(): void { this.subscription.unsubscribe(); } // 调用该服务的方法,发送信息; send():void { this.message.sendImages('www.baidu.com'); // 发送图片地址 this.message.sendMessage(2); // 发送信息消息 }
总结:这里的MessageService,就至关于使用广播机制,在全部的组件之间传递信息;无论是数字,字符串,仍是对象都是能够传递的,并且这里的传播速度也是很快的。code