1. 程式人生 > >angular 的 @Input、@Output 的一個用法

angular 的 @Input、@Output 的一個用法

script from console 做的 his temp http class child

angular 使用 @input、@Output 來進行父子組件之間數據的傳遞。

如下:

父元素:

<child-root parent_value="this is parent value" (child_emit)="test()"></child-root>

父元素標簽中有一個屬性是,parent_value,在子元素中可以使用該值:

<p [title]="parent_value" >this paragraph‘s title is from parent‘s(parent-root) attribute parent_value</p>

在子元素中,我們 p 標簽的 title 屬性綁定了父元素的 parent_value 屬性,這裏要註意了,

[title]="parent_value" 的意思並不是指 title 的值就是 "parent_value" 這個字符串,而是父元素中指定的 parent_value 屬性的值。

這裏,我們需要做的處理是,在子組件中,使用 @Input 去註解 parent_value 屬性,指明這是一個來自父組件的元素。

在上面的例子中,父元素也定義了一個屬性 child_emit,值是 test(),也就是說這是一個函數調用,在父元素組件中有一個 test 函數,可是我們應該怎麽調用呢?我們畢竟沒有 child_emit 這種事件,這時候我們就可以在子元素中觸發父元素的這個 test 方法的調用。

但是首先我們先要在子元素組件中把 child_emit 使用 @Output 進行註解,然後將其值設為 new EventEmitter,當我們在子組件中去調用 child_emit 方法的時候,父元素中 child_emit 的值的方法(test)就會被調用。

源碼如下:

child.component.ts

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

@Component({
  selector: ‘child-root‘,
  template: `    
  <p [title]="parent_value" >this paragraph‘s title is from parent‘s(parent-root) attribute parent_value</p>
  <button class="btn-font-family" (click)="trigger()">點擊的時候會觸發父元素 example-root 的 child_emit 對應的事件</button>
  `
})
export class ChildComponent {

  @Input()
  parent_value;

  @Output()
  child_emit = new EventEmitter();

  trigger() {
    this.child_emit.emit()
  }
}

  

parent.component.ts

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

@Component({
  selector: ‘example-root‘,
  template: `    
    <child-root parent_value="this is parent value" (child_emit)="test()"></child-root>
  `,
})
export class ParentComponent {
  @Output()
  parent_value;

  test ()  {
    console.log(‘call by emit at ‘ + new Date().toLocaleString())
  }
}

  

完整源碼:https://github.com/eleven26/angular-example/tree/master/src/input_output_example

angular 的 @Input、@Output 的一個用法