Для чого призначений параметр читання в @ViewChild


93

Потрібна допомога, щоб зрозуміти значення {read: ViewContainerRef} у наступному висловлюванні.

@ViewChild('myname', {read: ViewContainerRef}) target;

4
дивись це
Ankit Singh

Відповіді:


118

З тегом елемента зі #mynameзмінною шаблону може бути кілька екземплярів різних типів .

Для кожного елемента є ElementRefі ViewContainerRef(можливо, інші з компонентів або директив, що застосовуються до цього тегу).

Якщо елемент є компонентом, то існує екземпляр компонента.

Також може бути одна або кілька директив, що застосовуються до елемента

З {read: SomeType}вами сказати , який тип повинен бути повернутий із елемента з #mynameперемінним шаблоном.

Якщо ви не вказали readпараметр, @ViewChild()повертає

  • ElementRef наприклад, якщо не застосовано жодного компонента, або
  • примірник компонента, якщо є.
  • Якщо ви хочете отримати щось інше, вам потрібно чітко вказати використання read.

Див. Також Як я можу вибрати елемент у шаблоні компонента?


"можливо, інші компоненти або директиви, застосовані до цього тегу": Як ми можемо отримати повний список можливих типів?
Ghetolay

Директиви та компоненти, перелічені у directives: [...]поточному компоненті або PLATFORM_DITECTIVESтам, де селектори відповідають. Ви можете використовувати stackoverflow.com/questions/35233572/… для дослідження запущеної програми.
Günter Zöchbauer

3
Це підтримує лише типи Angular, пов'язані з вузлом. HTMLElementне належить до них. ElementRefдозволяє отримати доступ до HTMLElement за допомогою ʻElementRef.nativeElement.
Günter Zöchbauer

1
Просто пробую всілякі речі та досліджую джерело Angular2.
Günter Zöchbauer

1
Не можна, коли елемент є компонентом. Ви можете вказати, що ви хочете, лише якщо ви використовуєте@ViewChild(... read: ElementRef) ...
Гюнтер Цохбауер,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.