Как привязать компоненты к конкретному тегу в угловых?

Это макет приложения угловых электронов, которое я разрабатываю.

в динамическом регионе или теге я хочу связать другой компонент на основе нажатия на элементы списка в side-nav component, Все эти компоненты размещены в MainComponent, Динамический тег в MainComponent где я хочу иметь разные компоненты. Я хочу знать, как мне этого добиться. Какая техника доступна для этого или нет?

1 ответ

Я не уверен, что полностью понимаю, чего вы пытаетесь достичь, возможно, попытайтесь опубликовать некоторый код.

Вот поршень с угловыми динамическими компонентами, созданными по клику. https://plnkr.co/edit/p7VHB4?p=info возможно, вы можете начать отсюда.

export default class DynamicComponent {  
  currentComponent = null;
  @ViewChild('dynamicComponentContainer', { read: ViewContainerRef }) dynamicComponentContainer: ViewContainerRef;
  // component: Class for the component you want to create
  // inputs: An object with key/value pairs mapped to input name/input value
  @Input() set componentData(data: {component: any, inputs: any }) {
    if (!data) {
      return;
    }
    // Inputs need to be in the following format to be resolved properly
    let inputProviders = Object.keys(data.inputs).map((inputName) => {
      return {
        provide: inputName, 
        useValue: data.inputs[inputName]
      };
    });
    console.log(inputProviders);
    let resolvedInputs = ReflectiveInjector.resolve(inputProviders);
    // We create an injector out of the data we want to pass down and this components injector
    let injector = ReflectiveInjector.fromResolvedProviders(resolvedInputs, this.dynamicComponentContainer.parentInjector);
    // We create a factory out of the component we want to create
    let factory = this.resolver.resolveComponentFactory(data.component);
    // We create the component using the factory and the injector
    let component = factory.create(injector);
    //console.log("injector",inputProviders, resolvedInputs, factory, component);
    // We insert the component into the dom container
    let tempViewRef = this.dynamicComponentContainer.insert(component.hostView);
    let tempViewRefIndex = this.dynamicComponentContainer.indexOf(tempViewRef);
    // console.log(this.dynamicComponentContainer.get(tempViewRefIndex));
    console.log('**showNum Provider',this.dynamicComponentContainer);
    // Destroy the previously created component
    if(this.currentComponent){
      //this.currentComponent.destroy();
    }
    this.currentComponent = component;
  }

  constructor(private resolver: ComponentFactoryResolver) {
  }
}

Убедитесь, что добавили якорный компонент внутри вашей динамической области

<div>
  <h2>Lets dynamically create some components!</h2>
  <button (click)="createHelloWorldComponent()">Create Hello World</button>
  <button (click)="createWorldHelloComponent()">Create World Hello</button>
  <dynamic-component [componentData]="componentData"></dynamic-component>
</div>  
Другие вопросы по тегам