Я обновил свое приложение 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]
Технически компилятор прав, я использую входной сигнал для класса без украшения, но кажется, что это должно быть нормально, поскольку это суперкласс.
В Angular 17 это не было проблемой!
У меня довольно много компонентов, унаследованных от @Component
, и я не хочу повторять во всех них одни и те же объявления импорта.
Что я могу здесь сделать?
При использовании функций Angular, таких как signal
или ViewChild
, в классе (используемом для наследования), нам нужен декоратор, мы можем использовать @Directive()
, чтобы избавиться от этой ошибки.
@Directive()
export class DisplayComponent {
name = input.required<string>();
}
Мне пришлось подождать несколько минут, прежде чем ТАК позволил мне;)
Это единственный выход, да!