Я создаю компонент. Поскольку мне нравится способ Apache Wicket делать вещи, я пытаюсь подражать способу передачи данных IModel
. Для этого к дочернему компоненту я передаю модель и обратные вызовы, которые могут вытаскивать соответствующие значения, вместо того, чтобы вызывать функцию для получения данных вперед.Angular2: Как настроить @Input сеттеры в определенном порядке?
Проблема в том, что обработка вновь заданной модели использует обратные вызовы. Итак, если вызывающий модель вызывается до того, как будут установлены обратные вызовы, Угловые сбои.
Обход проблемы: отложить действия, требующие обратного вызова ngAfterViewInit()
или такие.
Короче:
- Как я могу контролировать порядок, в котором @Inputs устанавливаются?
- Могу ли я полагаться на заказ в исходном коде?
Пример: (Изменение порядка здесь, кажется, чтобы сделать работу)
@Input()
valueCallback: (item: any) => string
= app => { throw new Error("valueCallback not yet defined."); };
@Input()
labelCallback: (item: ItemType) => string;
шаблона с помощью этого ребенка компонента: (изменение порядка здесь не меняет порядок)
<wu-checkboxes [groupName]="'includedApps'"
[options]="availableApps"
[valueCallback]="appsValueCallback"
[labelCallback]="appsLabelCallback"
>
Как я уже упоминал выше, Angular2, похоже, соответствует порядку членов класса @Input
и устанавливает/вызывает их в этом порядке. Вопрос в том, что де-факто или де-юре? Я не хочу полагаться на функции, которые работают только потому, что в настоящее время они закодированы таким образом. Я не очень разбираюсь в отражении JavaScript, поэтому я не могу сказать, будет ли это работать повсюду.
Спасибо за подсказку. Это подход, который я подразумеваю под «ngAfterViewInit() или такой» и хотел бы избежать. Для этого требуется довольно какой-то шаблонный код, и я, боюсь, подвержен ошибкам. –
Указанный порядок ввода не указан, поэтому вы вряд ли сможете его избежать. –
Звучит правильно. Как насчет ответа на этот вопрос, и я соглашусь –