Angular2中@Input和@Output有什么区别

作者:编程家 分类: angular 时间:2025-12-17

## Angular 2中@Input和@Output的区别与使用

Angular 2 是一个流行的前端框架,提供了许多强大的功能来构建动态且可维护的Web应用程序。在Angular 2中,@Input和@Output是两个常用的装饰器,用于在组件之间传递数据和事件。虽然它们都涉及组件之间的通信,但它们有着不同的用途和工作原理。

### @Input装饰器

@Input装饰器用于在子组件中接收父组件传递的数据。通过在子组件的属性前添加@Input装饰器,可以将数据从父组件传递到子组件。这种机制使得组件之间能够更好地协同工作,实现了父子组件之间的数据共享。

typescript

// 父组件

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

@Component({

selector: 'app-parent',

template: `

`

})

export class ParentComponent {

dataFromParent = 'Hello from parent!';

}

typescript

// 子组件

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

@Component({

selector: 'app-child',

template: `

{{ childData }}

`

})

export class ChildComponent {

@Input() parentData: string;

get childData(): string {

return `Child says: ${this.parentData}`;

}

}

在上面的例子中,父组件通过使用@Input装饰器将数据传递给子组件,子组件通过`parentData`属性接收并显示相应的信息。

### @Output装饰器

@Output装饰器用于在子组件中触发事件,并将事件发送到父组件。通过在子组件的事件属性上添加@Output装饰器,可以在子组件中定义一个可以被外部监听的事件。

typescript

// 子组件

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

@Component({

selector: 'app-child',

template: `

`

})

export class ChildComponent {

@Output() customEvent = new EventEmitter();

sendEvent(): void {

this.customEvent.emit();

}

}

typescript

// 父组件

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

@Component({

selector: 'app-parent',

template: `

`

})

export class ParentComponent {

handleEvent(): void {

console.log('Event received in parent component!');

}

}

在上述例子中,子组件通过@Output装饰器定义了一个名为`customEvent`的事件,并在需要时触发该事件。父组件则通过监听这个事件来执行相应的逻辑。

###

在Angular 2中,@Input和@Output是两个关键的装饰器,用于实现组件之间的数据传递和事件触发。@Input用于从父组件向子组件传递数据,而@Output用于在子组件中触发事件并将事件发送到父组件。这两者共同为Angular应用程序提供了强大的组件通信机制,使得应用的各个部分能够更加灵活地协同工作。