小编Val*_*dov的帖子

Angular 2在不使用ViewContainerRef的情况下将组件动态插入特定DOM节点

我有一个关于Angular 2 rc5中动态组件创建的问题.

所以我们假设我们有两个普通的角度分量:

  @Component({
      template: `
        <div id="container">
          <h1>My Component</h1>
        </div>
       `,
      selector: 'my-app'
  })
  export class AppComponent { }

  @Component({
      template: '<p>{{text}}</p>',
      selector: 'simple-cmp'
  })
  export class SimpleComponent { public text='Hello World!' }
Run Code Online (Sandbox Code Playgroud)

然后一些外部非角度代码块修改DOM:

let newNode = document.createElement('div');
newNode.id = 'placeholder';
document.getElementById('container').appendChild(newNode);
Run Code Online (Sandbox Code Playgroud)

这是操作后的一些可能的树:

 <div id="container">
      <h1>My Component</h1>
      <div id="placeholder"></div>
 </div>
Run Code Online (Sandbox Code Playgroud)

所以我要做的就是将SimpleComoponent实例动态添加到#placeholder div中.我怎样才能达到这个效果?

我一直在尝试使用ComponentFactory.createComponent(injector,[],newNode),但它添加了组件,但生命周期挂钩和绑定都没有工作.

我相信有一些方法可以使用ViewContainerRef来实现它,但是如何将它与动态创建的节点链接?

这是我期望的结果

 <div id="container">
      <h1>My Component</h1>
      <div id="placeholder">
        <simple-cmp>Hello world!</simple-cmp>
      </div>
 </div>
Run Code Online (Sandbox Code Playgroud)

谢谢!

typescript angular2-template angular

11
推荐指数
2
解决办法
9088
查看次数

标签 统计

angular ×1

angular2-template ×1

typescript ×1