Angular 如何以最有效的方式提取ViewContainerRef和ComponentRef?
我使用角度材质mdSidenav,希望以编程方式打开它并插入自定义组件 我使用Angular 如何以最有效的方式提取ViewContainerRef和ComponentRef?,angular,angular2-directives,angular-material2,Angular,Angular2 Directives,Angular Material2,我使用角度材质mdSidenav,希望以编程方式打开它并插入自定义组件 我使用@ViewChild('varName')提取组件实例,并使用@ViewChild('varName',{read:ViewContainerRef})提取容器,将内容放在其中 所以,我的问题是-是否可能只需要1@ViewChild并从提取的引用中获取其他信息 第二个问题-哪些值允许读取属性?ElementRef/ViewContainerRef/ 更新: 我发现,mdSidenav的ViewContainerRef对
@ViewChild('varName')
提取组件实例,并使用@ViewChild('varName',{read:ViewContainerRef})
提取容器,将内容放在其中
所以,我的问题是-是否可能只需要1@ViewChild并从提取的引用中获取其他信息
第二个问题-哪些值允许读取属性?ElementRef/ViewContainerRef/
更新:
我发现,mdSidenav的ViewContainerRef对于我的组件来说是不正确的容器。如何将component.hostView放置在mdSidenav hostView中
是否可能只需要1@ViewChild并从中获取其他信息
参考资料
不,不能为一个属性指定多个读取类型。例如,您可以在html中指定以下内容:
<ng-template mydir #vc></ng-template>
RenderElement
指向与视图节点关联的本机DOM元素,但它在内部使用,不能使用组件中的查询访问AFAIK
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;
}
}