Tworzę komponent. Ponieważ podoba mi się sposób działania Apache Wicket, próbuję emulować sposób przekazywania danych przez IModel
. W tym celu do komponentu potomnego przekazuję model i wywołania zwrotne, które mogą wyciągnąć odpowiednie wartości, zamiast wywoływania funkcji, aby uzyskać dane z góry.Angular2: Jak ustawić selektory @Input w określonej kolejności?
Problem polega na tym, że obsługa nowo ustawionego modelu używa wywołań zwrotnych. Tak więc, jeśli funkcja ustawiania modelu jest wywoływana przed ustawieniem funkcji zwrotnych, powoduje awarię kątową.
Obejście: odroczenie działań, które wymagają oddzwaniania do ngAfterViewInit()
lub podobnego.
W skrócie:
- Jak mogę kontrolować kolejność, w jakiej @Inputs są ustawione?
- Czy mogę polegać na zamówieniu w kodzie źródłowym?
Przykład: (Zmiana kolejności tutaj wydaje się wykonać zadanie)
@Input()
valueCallback: (item: any) => string
= app => { throw new Error("valueCallback not yet defined."); };
@Input()
labelCallback: (item: ItemType) => string;
szablon przy użyciu tego składnika dziecko: (Zmiana kolejności tutaj nie zmienia kolejność)
<wu-checkboxes [groupName]="'includedApps'"
[options]="availableApps"
[valueCallback]="appsValueCallback"
[labelCallback]="appsLabelCallback"
>
Jak wspomniałem powyżej, Angular2 wydaje się podążać za kolejnością członków klasy @Input
i ustawia/wywołuje je w tej kolejności. Pytanie brzmi: czy to de facto, czy de-jure? Nie chcę polegać na funkcjach, które działają tylko dlatego, że są obecnie kodowane w ten sposób. Nie wiem zbyt wiele o odbiorze JavaScript, więc nie mogę stwierdzić, czy to będzie działać wszędzie.
Dzięki za cynk. Takie podejście rozumiem przez "ngAfterViewInit() lub takie" i chciałbym tego uniknąć. Wymaga to trochę kodu standardowego i jest, obawiam się, podatny na błędy. –
Nie ma określonej kolejności wejść, dlatego mało prawdopodobne, aby można było tego uniknąć. –
Brzmi nieźle. A co powiesz na odpowiedź i ja to zaakceptuję –