Currently, the component architecture relies heavily on legacy Angular standards (e.g., standard @Input()/@Output() decorators, verbose RxJS Observable chains, constructor injection, and legacy structural directives). By migrating to the latest Angular reactivity and authoring features (Signals, signal-based inputs/outputs/queries, the new built-in control flow, and inject()), we will drastically improve code quality, reduce boilerplate, and optimize change detection across the massive application.
This would be a massive undertaking, but moving entirely to these new primitives will significantly benefit performance and maintainability.
Examples of planned migrations:
- Inputs:
@Input() data: string; ➡️ data = input<string>();
- Outputs:
@Output() event = new EventEmitter<void>(); ➡️ event = output<void>();
- Queries:
@ViewChild('myRef') ref: ElementRef; ➡️ ref = viewChild<ElementRef>('myRef');
- State:
data$: Observable<string>; ➡️ data = signal<string>(''); (or toSignal())
- Lifecycle / Reactivity:
ngOnChanges() ➡️ computed() or effect()
- DI:
constructor(private router: Router) ➡️ private router = inject(Router);
Note: I can start working on this as soon as it's approved!
Currently, the component architecture relies heavily on legacy Angular standards (e.g., standard
@Input()/@Output()decorators, verbose RxJSObservablechains, constructor injection, and legacy structural directives). By migrating to the latest Angular reactivity and authoring features (Signals, signal-based inputs/outputs/queries, the new built-in control flow, andinject()), we will drastically improve code quality, reduce boilerplate, and optimize change detection across the massive application.This would be a massive undertaking, but moving entirely to these new primitives will significantly benefit performance and maintainability.
Examples of planned migrations:
@Input() data: string;➡️data = input<string>();@Output() event = new EventEmitter<void>();➡️event = output<void>();@ViewChild('myRef') ref: ElementRef;➡️ref = viewChild<ElementRef>('myRef');data$: Observable<string>;➡️data = signal<string>('');(ortoSignal())ngOnChanges()➡️computed()oreffect()constructor(private router: Router)➡️private router = inject(Router);Note: I can start working on this as soon as it's approved!