Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angular2从任何HTML元素获取TemplateRef_Javascript_Angular_Typescript - Fatal编程技术网

Javascript Angular2从任何HTML元素获取TemplateRef

Javascript Angular2从任何HTML元素获取TemplateRef,javascript,angular,typescript,Javascript,Angular,Typescript,我需要将组件动态加载到HTML元素中,该元素可能位于我的应用程序组件中的任何位置 我计划使用TemplateRef作为ViewContainerRef.createEmbeddedView(TemplateRef)的参数来动态加载所需的组件 我希望它看起来像这样 var myViewRef = this.viewContainer.createEmbeddedView( getTemplateRefFromNode(document.querySelector('.anySelector')

我需要将组件动态加载到HTML元素中,该元素可能位于我的
应用程序
组件中的任何位置

我计划使用
TemplateRef
作为
ViewContainerRef.createEmbeddedView(TemplateRef)
的参数来动态加载所需的组件

我希望它看起来像这样

var myViewRef = this.viewContainer.createEmbeddedView(
  getTemplateRefFromNode(document.querySelector('.anySelector'))
);
this.resolver.resolveComponent(myComponent)
  .then(factory => {
    var newComponent = myViewRef.createComponent(factory, 0, myViewRef.injector);
  });

这不是它的工作原理,根本不是。您没有与任何DOM节点关联的
TemplateRef
TemplateRef
是由
元素创建的结构,并且仅是
元素


很难提出替代方案,因为我不清楚您所说的“我需要动态地将组件加载到可能位于我的应用程序组件中任何位置的HTML元素中”的确切含义。这不是它的工作方式,一点也不。您没有与任何DOM节点关联的
TemplateRef
TemplateRef
是由
元素创建的结构,并且仅是
元素


很难提出替代方案,因为我不清楚您所说的“我需要动态地将组件加载到可能位于我的应用程序组件中任何位置的HTML元素中”的确切含义。

您是否试图将组件加载到组件内容中的任意位置

如果是这样,在组件内容的某个地方,在元素上放置一个
#loadLocation
属性,那么组件中的此代码将把自定义组件插入该元素中

@ContentChild('loadLocation',{read: ViewContainerRef}) loadLocation: ViewContainerRef;

constructor(private componentFactoryResolver: ComponentFactoryResolver) {}

ngAfterContentInit() {
  if (!this.loadLocation) {
    return;
  }
  let componentFactory = this.componentFactoryResolver.resolve(myComponent);
  let newComponent = this.loadLocation.createComponent(componentFactory);
}

您是否试图将组件加载到组件内容内的任意位置

如果是这样,在组件内容的某个地方,在元素上放置一个
#loadLocation
属性,那么组件中的此代码将把自定义组件插入该元素中

@ContentChild('loadLocation',{read: ViewContainerRef}) loadLocation: ViewContainerRef;

constructor(private componentFactoryResolver: ComponentFactoryResolver) {}

ngAfterContentInit() {
  if (!this.loadLocation) {
    return;
  }
  let componentFactory = this.componentFactoryResolver.resolve(myComponent);
  let newComponent = this.loadLocation.createComponent(componentFactory);
}

第三方开发人员正在开发插件,以便在我们的网站上呈现。我希望这些开发人员能够为他们的组件的加载位置提供css选择器。你能想出一个方法来实现这一点吗?在单独的视图中呈现组件,然后将节点移动到正确的位置是否可行?第三方开发人员正在开发插件,以便在我们的网站顶部呈现。我希望这些开发人员能够为他们的组件的加载位置提供css选择器。你能想出一个方法来实现这一点吗?在单独的视图中渲染组件,然后将节点移动到正确的位置是否可行?