Qual é o parâmetro de leitura em @ViewChild para

92

Precisa de ajuda para entender o significado de {leia: ViewContainerRef} na declaração a seguir.

@ViewChild('myname', {read: ViewContainerRef}) target;
Pankaj Kapare
fonte
4
veja isto
Ankit Singh

Respostas:

116

Pode haver várias instâncias de vários tipos associados à tag de elemento com a #mynamevariável de modelo.

Para cada elemento existe um ElementRefe ViewContainerRef(talvez outros de componentes ou diretivas aplicadas a essa tag).

Se o elemento for um componente, existe a instância do componente.

Também pode haver uma ou várias diretivas aplicadas ao elemento

Com {read: SomeType}você informa qual tipo deve ser retornado do elemento com a #mynamevariável de modelo.

Se você não fornecer o readparâmetro, @ViewChild()retorna o

  • ElementRef instância se não houver nenhum componente aplicado, ou o
  • instância do componente, se houver.
  • Se você deseja obter algo diferente, você precisa especificar explicitamente o uso read.

Veja também Como posso selecionar um elemento em um template de componente?

Günter Zöchbauer
fonte
'talvez outros de componentes ou diretivas aplicadas a essa tag': como podemos obter a lista completa de tipos possíveis?
Ghetolay
As diretivas e componentes listados em directives: [...]do componente atual ou PLATFORM_DITECTIVESonde um seletor corresponde. Você pode usar stackoverflow.com/questions/35233572/… para investigar um aplicativo em execução.
Günter Zöchbauer
3
Isso só oferece suporte a tipos angulares associados a um nó. HTMLElementnão é um deles. ElementRefpermite acessar o HTMLElement usando `ElementRef.nativeElement.
Günter Zöchbauer
1
Apenas tentando todos os tipos de coisas e investigando a fonte do Angular2.
Günter Zöchbauer
1
Você não pode quando o elemento é um componente. Você só pode especificar o que deseja se usar@ViewChild(... read: ElementRef) ...
Günter Zöchbauer