Является ли forwardRef обязательным при создании NG_VALUE_ACCESSOR

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

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

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

person Surya KLSV    schedule 27.05.2020    source источник


Ответы (2)


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

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

Подробное чтение см. здесь

person Paul    schedule 27.05.2020

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

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

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;
})();
person yurzui    schedule 27.05.2020