@Input
是 Angular 框架中的一个装饰器,用于标记组件的输入属性。它允许父组件向子组件传递数据。通过将 @Input
装饰器应用于组件的属性,可以将该属性标记为输入属性,从而使其能够接收来自父组件的值。
@Input
,父组件和子组件之间的耦合度降低,使得组件更加独立和可复用。@Input
可以进行类型检查,确保传递的数据类型正确。@Input
可以接受多种类型的值,包括基本数据类型(如字符串、数字、布尔值)、对象、数组等。
@Input
常用于以下场景:
@Input
向子组件传递数据。@Input
可以使组件更加灵活和可配置。@Input
成为必需的在 Angular 中,默认情况下,@Input
属性是非必需的。如果希望使 @Input
成为必需的,可以使用 @Input()
装饰器并结合 TypeScript 的类型系统来实现。
import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';
@Component({
selector: 'app-child',
template: `<p>{{ data }}</p>`
})
export class ChildComponent implements OnChanges {
@Input() data: string;
ngOnChanges(changes: SimpleChanges): void {
if (!this.data) {
throw new Error('data input is required');
}
}
}
在这个示例中,ChildComponent
组件的 data
属性被标记为 @Input
。在 ngOnChanges
生命周期钩子中,检查 data
是否存在,如果不存在则抛出错误,从而确保 data
是必需的。
@Input
没有被触发?原因:
@Input
属性。@Input
没有更新。解决方法:
ChangeDetectorRef
手动触发变更检测。import { ChangeDetectorRef } from '@angular/core';
@Component({
selector: 'app-parent',
template: `<app-child [data]="someData"></app-child>`
})
export class ParentComponent {
someData: string;
constructor(private cdr: ChangeDetectorRef) {}
updateData() {
this.someData = 'new data';
this.cdr.detectChanges(); // 手动触发变更检测
}
}
通过以上方法,可以确保 @Input
属性被正确触发和更新。
领取专属 10元无门槛券
手把手带您无忧上云