Dynamic add component using gridstack and angular2? Jquery $.parseHTML does not work

后端 未结 2 1347
梦谈多话
梦谈多话 2021-01-04 02:59

I have the following jsfiddle

I want to be able to stick my custom component into a specific grid (e.g. \"\")

Right now without Angular2, I just use:

相关标签:
2条回答
  • 2021-01-04 03:35

    You need to use Angular 2’s ViewContainerRef class, which provides a handy createComponent method. The ViewContainerRef can be informally thought of as a location in the DOM where new components can be inserted.

    this.cmpRef = this.vcRef.createComponent(factory, 0, injector, []);
    

    Here's a working plunker example.

    Or you can use the generic HTML outlete from this post

    0 讨论(0)
  • 2021-01-04 03:38

    The easist way to add fancy-button component dynamically might be as follows:

    1) Add component to entryComponents array of your module

    @NgModule({
      imports:      [ BrowserModule ],
      declarations: [ AppComponent, GridStackComponent, FancyButtonComponent ],
      entryComponents: [ FancyButtonComponent ], // <== here
      bootstrap:    [ AppComponent ]
    })
    export class AppModule { }
    

    2) Get root node from compiled component

    constructor(private vcRef: ViewContainerRef, private componentFactoryResolver: ComponentFactoryResolver) { }
    
    getRootNodeFromParsedComponent(component) {
      const componentFactory = this.componentFactoryResolver.resolveComponentFactory(component);
      const ref = this.vcRef.createComponent(componentFactory, this.vcRef.length, this.vcRef.injector);
      const hostView = <EmbeddedViewRef<any>>ref.hostView;
      return hostView.rootNodes[0];
    }
    

    3) Use it anywhere

    const fancyBoxElement = this.getRootNodeFromParsedComponent(FancyBoxComponent);  
    $('#someId').append(fancyBoxElement);
    

    Here's Plunker Example for your case

    If you're looking for something more complicated then there are a lot of answers where you can use angular compiler to do it working

    • Load existing components dynamically Angular 2 Final Release
    • Equivalent of $compile in Angular 2
    • How can I use/create dynamic template to compile dynamic Component with Angular 2.0?
    • Angular 2.1.0 create child component on the fly, dynamically
    • How to manually lazy load a module?
    0 讨论(0)
提交回复
热议问题