angular4 组件间通讯

1.父→子 input

parent.ts

import { Component } from '@angular/core';

@Component({
  selector: 'page-parent',
  templateUrl: 'parent.html',
})
export class ParentPage {
  i: number = 0;
  constructor() {
    setInterval(() => {
      this.i++;
    }, 1000)
  }
}

parent.html

<ion-header>
  <ion-navbar>
    <ion-title>Parent</ion-title>
  </ion-navbar>
</ion-header>

<ion-content padding>
  <h2>Parent</h2>
  <!--page-child为子组件标签,content指令是child.ts中用@Input定义的-->
  <page-child [content]="i"></page-child>
</ion-content>

child.ts

import { Component,Input } from '@angular/core';

@Component({
  selector: 'page-child',
  templateUrl: 'child.html',
})
export class ChildPage {
  @Input() 
  content:string;
  constructor() {}

child.html

<div>child:{{content}}</div>

2.子→父 output

angular提供了EventEmitter类来用于接收和发射数据,这里我们使用EventEmitteremit方法来向父组件发射数据。

child.ts

import { Component, EventEmitter, Output } from '@angular/core';

@Component({
  selector: 'page-child',
  templateUrl: 'child.html',
})

export class ChildPage {
  //定义输出属性,EventEmitter用来将属性发射出去,这里的泛型指定
  //了要发射出去的的数据类型
  @Output() 
  changeNumber: EventEmitter<number> = new EventEmitter();
  Number: number = 0;
  constructor() {
    setInterval(() => {
      this.changeNumber.emit(++this.Number);
    }, 1000)
  }
}

child.html

<div>child</div>

parent.ts

import { Component } from '@angular/core';

@Component({
  selector: 'page-parent',
  templateUrl: 'parent.html',
})
export class ParentPage {
  i: number = 0;

  numberIChange(event:number){
      this.i = event;
  }
}

parent.html

<ion-header>
  <ion-navbar>
    <ion-title>Parent</ion-title>
  </ion-navbar>
</ion-header>

<ion-content padding>
  <h2>Parent:{{i}}</h2>
   <!--这里将子组件的changeNumber属性与父组件的事件绑定,$event其实就是子组件发射出来的值number-->
  <page-child (changeNumber)="numberIChange($event)"></page-child>
</ion-content>

 3.父、子间双向绑定

使用[()]来进行父组件和子组件的双向数据绑定时,Output属性的名称 = Input属性+Change,如下

child.ts

  @Input()
  private rating:number=0;//当前星级,接收父组件productDetail传来的值

  @Output()
  private ratingChange:EventEmitter<number> = new EventEmitter();//星级变化,将当前的星级输出到父组件

  click(){
    this.ratingChange.emit(this.rating);//发射当前rating值出去,在父组件接收          
 }

parent.ts

 newRating:number = 5;

parent.html

 <app-stars [(rating)]="newRating"></app-stars>

 

posted @ 2018-03-26 12:18  龙哥迷恋上  阅读(263)  评论(0编辑  收藏  举报