@ViewChildはちょうど1つ可能であり、他の情報は の参照から取得できますか?
いいえ、1つのプロパティに複数の読み取りタイプを指定することはできません。たとえば、あなたは、HTMLで次のように指定します。
<ng-template mydir #vc></ng-template>
は、今ではElementRef
、TemplateRef
、ViewContainerRef
またはMyDirectiveInstance
として読み取ることができます。 Angularはこのノードに対して何を返すべきかを知らないので、複数のタイプのread
を指定することはできません。それぞれのクエリプロパティには、単一のread
タイプを指定する必要があります。そして、一般的に、あなたは他のタイプから1つのタイプを得ることはできません。両方ともですが
読み取りプロパティにはどの値が許可されていますか? ElementRef/ViewContainerRef/...?
- ElementRef
- TemplateRef
- ViewContainerRef
- プロバイダ(コンポーネント/指令インスタンス)
として次のことができます。
クエリを介して取得することができ、以下の種類があります。このソースコードから見てください:
export function getQueryValue(
view: ViewData, nodeDef: NodeDef, queryValueType: QueryValueType): any {
if (queryValueType != null) {
// a match
let value: any;
switch (queryValueType) {
case QueryValueType.RenderElement:
value = asElementData(view, nodeDef.index).renderElement;
break;
case QueryValueType.ElementRef:
value = new ElementRef(asElementData(view, nodeDef.index).renderElement);
break;
case QueryValueType.TemplateRef:
value = asElementData(view, nodeDef.index).template;
break;
case QueryValueType.ViewContainerRef:
value = asElementData(view, nodeDef.index).viewContainer;
break;
case QueryValueType.Provider:
value = asProviderData(view, nodeDef.index).instance;
break;
}
return value;
}
}
RenderElement
ビュー・ノードに関連付けられているネイティブDOM要素を指し、それは内部的に使用され、私の知る限り、コンポーネントにクエリを使用してアクセスすることができません。