响应组件事件

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。在我们的模板中,我们使用 [方括号] 传递输入,使用(括号)来处理输出。