我已将 Angular 17 应用程序更新到 Angular 18,现在 Angular 不希望我在超级类中拥有信号输入:
export class DisplayComponent {
name = input.required<string>();
}
@Component({
selector: 'app-display',
standalone: true,
...})
export class ADisplayComponent extends DisplayComponent {
someMethod() {
// do something with this.name();
}
}
运行此 Angular 时抱怨:
TS-998110: Unsupported call to the input.required function.
This function can only be used as the initializer of a property on a @Component or @Directive class. [plugin angular-compiler]
从技术上讲,编译器是正确的,我在没有
@Component
装饰的类上使用输入信号,但感觉这应该没问题,因为它是超类。
在 Angular 17 中这不是问题!
我有相当多的组件继承自
DisplayComponent
,并且不想在所有组件中重复相同的导入声明。
我在这里能做什么?
当在类(用于继承)上使用像
signal
或ViewChild
这样的角度特征时,我们需要一个装饰器,我们可以使用@Directive()
来消除这个错误。
@Directive()
export class DisplayComponent {
name = input.required<string>();
}