Angular 如何以最有效的方式提取ViewContainerRef和ComponentRef?

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对

我使用角度材质mdSidenav,希望以编程方式打开它并插入自定义组件

我使用
@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;
  }
}