Angular 2 组件之间如何通信

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

转载自:Angular 2 组件之间如何通信?

组件之间的共享可以有好几种方式

父->子 input 方式

import {Component,Input} from 'angular2/core';@Component({    selector: 'child',    template: `        <h2>child {{content}}</h2>    `})class Child {    @Input() content:string;}@Component({    selector: 'App',    directives: [Child],    template: `        <h1>App</h1>        <child [content]="i"></child>    `})export class App {    i:number = 0;    constructor() {        setInterval(()=> {            this.i++;        }, 1000)    }}

子->父 output 方式

import {Output,EventEmitter,Component} from 'angular2/core';@Component({    selector: 'child',    template: `        <h2>child</h2>    `})class Child {    @Output() updateNumberI:EventEmitter<number> = new EventEmitter();    i:number = 0;    constructor() {        setInterval(()=> {            this.updateNumberI.emit(++this.i);        }, 1000)    }}@Component({    selector: 'App',    directives: [Child],    template: `        <h1>App {{i}}</h1>        <child (updateNumberI)="numberIChange($event)"></child>    `})export class App {    i:number = 0;    numberIChange(i:number){        this.i = i;    }}

子获得父实例

如果不了解forwardRef用处的的可以看 #11
@Host 表示这个Injector必须是host element在这里可以理解为 parent

import {Host,Component,forwardRef} from 'angular2/core';@Component({    selector: 'child',    template: `        <h2>child</h2>    `})class Child {    constructor(@Host() @Inject(forwardRef(()=> App)) app:App) {        setInterval(()=> {            app.i++;        }, 1000);    }}@Component({    selector: 'App',    directives: [Child],    template: `        <h1>App {{i}}</h1>        <child></child>    `})export class App {    i:number = 0;}

父获得子实例

子元素指令在父constructor时是获取不到的,所以必须在组件的ngAfterViewInit生命周期钩子后才能获取,如果对组件生命周期不了解的话,可以参考 #56

import {ViewChild,Component} from 'angular2/core';@Component({    selector: 'child',    template: `        <h2>child {{i}}</h2>    `})class Child {    i:number = 0;}@Component({    selector: 'App',    directives: [Child],    template: `        <h1>App {{i}}</h1>        <child></child>    `})export class App {    @ViewChild(Child) child:Child;    ngAfterViewInit() {        setInterval(()=> {            this.child.i++;        }, 1000)    }}

service 方式

import {Component,Injectable} from 'angular2/core';@Injectable();class KittencupService {    i:number = 0;}@Component({    selector: 'child',    template: `        <h2>child {{service.i}}</h2>    `})class Child {    constructor(public service:KittencupService){    }}@Component({    selector: 'App',    directives: [Child],    providers: [KittencupService],    template: `        <h1>App {{i}}</h1>        <child></child>    `})export class App {    constructor(service:KittencupService) {        setInterval(()=> {            service.i++;        }, 1000)    }}

service EventEmitter方式

import {Component,Injectable,EventEmitter} from 'angular2/core';@Injectable()class KittencupService {    change: EventEmitter<number>;    constructor(){        this.change = new EventEmitter();    }}@Component({    selector: 'child',    template: `<h2>child {{i}}</h2>`})class Child {    public i:number = 0;    constructor(public service:KittencupService){        service.change.subscribe((value:number)=>{            this.i = value;        })    }}@Component({    selector: 'App',    directives: [Child],    providers: [KittencupService],    template: `<h1>App {{i}}</h1><child></child>`})export class App {    i:number = 0;    constructor(service:KittencupService) {        setInterval(()=> {            service.change.emit(++this.i);        }, 1000)    }}

           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
这里写图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值