Обязателен ли forwardRef при создании NG_VALUE_ACCESSOR - PullRequest
3 голосов
/ 27 мая 2020

У меня есть настраиваемый компонент ввода, который реализует ControlValueAccessor с поставщиками, объявленными следующим образом. Вроде нормально работает. Во всех учебных пособиях, которые я смог найти на inte rnet, forwardRef широко использовался всякий раз, когда предоставляется NG_VALUE_ACCESSOR

Безопасно ли отправлять следующий код в производство?

providers: [{
  provide: NG_VALUE_ACCESSOR,
  useExisting: CustomInputComponent,  //Notice I omitted forwardRef here and it works fine
  multi: true
}]

Ответы [ 2 ]

0 голосов
/ 27 мая 2020

Цель forwardRef - отложить доступ к классу, который не определен во время выполнения текущего кода.

Это не обязательно для вашего случая , потому что TypeScript преобразует ваш код таким образом, когда выполнение декоратора идет после определения класса .

let CustomInputComponent = /** @class */ (() => {
    var CustomInputComponent_1;
    let CustomInputComponent = CustomInputComponent_1 = class CustomInputComponent {
    };
    CustomInputComponent = CustomInputComponent_1 = __decorate([
        Component({
            selector: 'app-custom-input',
            template: '<input />local: {{val}}',
            providers: [
                {
                    provide: NG_VALUE_ACCESSOR,
                    useExisting: CustomInputComponent_1, // already defined!!!
                    multi: true
                }
            ]
        })
    ], CustomInputComponent);
    return CustomInputComponent;
})();
0 голосов
/ 27 мая 2020

forwardRef позволяет Angular внедрить зависимость до того, как она будет определена. В этом случае, если этот массив поставщиков определен внутри декоратора @Component для настраиваемого компонента ввода, как вы упомянули, он будет работать, поскольку декораторы применяются после определения класса .

По сути, вы можете удалить forwardRef, если вы используете его только для ссылки на компонент внутри декоратора для этого же компонента.

См. Здесь для более подробного чтения

...