• 响应组件事件

    响应组件事件

    Angular 2中的事件与它们在Angular 1.x中的工作类似。最大的变化是模板语法。

    1. import {Component} from '@angular/core';
    2. @Component({
    3. selector: 'rio-counter',
    4. template: `
    5. <div>
    6. <p>Count: {{num}}</p>
    7. <button (click)="increment()">Increment</button>
    8. </div>
    9. `
    10. })
    11. export class CounterComponent {
    12. num = 0;
    13. increment() {
    14. this.num++;
    15. }
    16. }

    View Example

    要通过 outputs 从组件发送数据,请先定义outputs属性。它接受组件向其父组件公开的输出参数的列表。

    app/counter.component.ts

    1. import { Component, EventEmitter, Input, Output } from '@angular/core';
    2. @Component({
    3. selector: 'rio-counter',
    4. templateUrl: 'app/counter.component.html'
    5. })
    6. export class CounterComponent {
    7. @Input() count = 0;
    8. @Output() result = new EventEmitter<number>();
    9. increment() {
    10. this.count++;
    11. this.result.emit(this.count);
    12. }
    13. }

    app/counter.component.html

    1. <div>
    2. <p>Count: {{ count }}</p>
    3. <button (click)="increment()">Increment</button>
    4. </div>

    app/app.component.ts

    1. import { Component, OnChange } from '@angular/core';
    2. @Component({
    3. selector: 'rio-app',
    4. templateUrl: 'app/app.component.html'
    5. })
    6. export class AppComponent implements OnChange {
    7. num = 0;
    8. parentCount = 0;
    9. ngOnChange(val: number) {
    10. this.parentCount = val;
    11. }
    12. }

    app/app.component.html

    1. <div>
    2. Parent Num: {{ num }}<br>
    3. Parent Count: {{ parentCount }}
    4. <rio-counter [count]="num" (result)="ngOnChange($event)">
    5. </rio-counter>
    6. </div>

    View Example

    一组 input + output 绑定定义组件的公共API。在我们的模板中,我们使用 [方括号] 传递输入,使用(括号)来处理输出。