Какой параметр чтения в @ViewChild для

94

Нужна помощь, чтобы понять значение {read: ViewContainerRef} в следующем заявлении.

@ViewChild('myname', {read: ViewContainerRef}) target;
Панкадж Капаре
источник
4
увидеть это
Анкит Сингх

Ответы:

119

Может быть несколько экземпляров различных типов, связанных с тегом элемента с #mynameпеременной шаблона.

Для каждого элемента есть ElementRefи ViewContainerRef(возможно, другие из компонентов или директив, примененных к этому тегу).

Если элемент является компонентом, то существует экземпляр компонента.

К элементу также может применяться одна или несколько директив.

С {read: SomeType}помощью #mynameпеременной шаблона вы указываете, какой тип должен быть возвращен из элемента .

Если вы не предоставили readпараметр, @ViewChild()возвращает

  • ElementRef экземпляр, если компонент не применяется, или
  • экземпляр компонента, если есть.
  • Если вы хотите получить что-то другое, вам нужно явно указать using 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) ...
Günter Zöchbauer