Estou tentando migrar uma biblioteca antiga de componentes Angular para componentes autônomos.
Vários componentes têm muito em comum, então eu uso uma superclasse para todo o comportamento comum. Pelo menos como eu estava acostumado a fazer as coisas, a superclasse de a @Component
não deveria ser another @Component
, mas sim a @Directive
.
O início da superclasse se parece com isso:
// @dynamic
@Directive()
export abstract class DigitSequenceEditorDirective<T> implements
AfterViewInit, ControlValueAccessor, OnInit, OnDestroy, Validator {
// ...
E um dos componentes da subclasse começa assim:
// @dynamic
@Component({
selector: 'tbw-time-editor',
animations: [BACKGROUND_ANIMATIONS],
templateUrl: '../digit-sequence-editor/digit-sequence-editor.directive.html',
styleUrls: ['../digit-sequence-editor/digit-sequence-editor.directive.scss', './time-editor.component.scss'],
providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => TimeEditorComponent), multi: true },
{ provide: NG_VALIDATORS, useExisting: forwardRef(() => TimeEditorComponent), multi: true }]
})
export class TimeEditorComponent extends DigitSequenceEditorDirective<number> implements OnInit {
// ...
O problema agora, ao portar isso para o Angular 19 e tentar usar um design independente, é que o HTML para a diretiva contém alguns recursos do CommonModule como [ngClass]
e [ngStyle]
. (Também há usos de *ngIf
e semelhantes, mas posso me livrar deles usando @if
, @for
, etc.)
Uma recomendação não funcionalCommonModule
do Google AI para usar recursos em uma diretiva se parece com isto:
import { Directive, Input } from '@angular/core';
import { NgIf } from '@angular/common';
@Directive({
selector: '[appMyStandalone]',
standalone: true,
imports: [NgIf] // Can't be done! No `imports` field! (I'd have NgClass and NgStyle here if this worked)
})
export class MyStandaloneDirective {
@Input() appMyStandalone: boolean = false;
}
Se eu não puder usar imports
uma diretiva, como resolvo o problema da linha vermelha ondulada abaixo?