Компоненты, наследующие свойства базового класса (директива)Javascript

Форум по Javascript
Ответить
Anonymous
 Компоненты, наследующие свойства базового класса (директива)

Сообщение Anonymous »

Я пытаюсь динамически обновлять входные данные моих компонентов Angular с помощью ViewContainerRef.createComponent.
В настоящее время мои компоненты наследуют свойства входного сигнала из этой директивы:

Код: Выделить всё

@Directive()
export abstract class BaseWidget {
data = input();
widgetSize = input(Size.S);
selectedLocation = input('');
timeslot = input(null);

@ViewChild('footer') footer!: TemplateRef | null;
}
каждый компонент наследует такие свойства:

Код: Выделить всё

export class MyComponent extends BaseWidget {}
В моем контейнере я загружаю компонент динамически:

Код: Выделить всё

const componentRef = viewContainerRef.createComponent(componentType);

componentRef.setInput('data', widgetConfig.data);
componentRef.setInput('widgetSize', this.widgetSize);
componentRef.setInput('timeslot', this.getWidgetInfoByType(this.widgetType).timeSlot);
componentRef.setInput('selectedLocation', widgetConfig.selectedLocation);
Это работает, но в компоненте входные данные являются обычными свойствами, поэтому доступ к ним осуществляется следующим образом:

Код: Выделить всё

this.widgetSize  // not this.widgetSize()
Цель
Я хочу, чтобы входные данные стали входными сигналами с помощью input() Angular, чтобы я мог читать их как функции:

Код: Выделить всё

this.widgetSize()  // instead of this.widgetSize
Проблема
input() создает входной сигнал только для чтения
Вопрос
Есть ли в Angular способ:
объявлять входные данные компонента как входные сигналы (this.widgetSize())
обновлять их динамически из контейнера с помощью createComponent
Или вам всегда приходится выбирать между входными сигналами только для чтения и обычными свойствами при использовании динамических компонентов?

Подробнее здесь: https://stackoverflow.com/questions/798 ... -directive
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»