получение ссылки на компонент из метода ViewContainerRef.get () - PullRequest
0 голосов
/ 08 июля 2020

то, что я пытаюсь сделать

  • динамически создавать компоненты, используя componentFactoryResolver
  • добавлять динамически созданные компоненты в ViewContainerRef с помощью insert() методов
  • с помощью метода viewContainerRef get(index) получить ссылку на базовый компонент, связанный с представлением. цель состоит в том, чтобы иметь доступ к свойствам компонента, таким как 'id' к

, создание динамических компонентов c и их вставка выполняется достаточно легко, если вы следуете динамическому c компонентный загрузчик пошаговое руководство по Angular .io

то, на что я не нахожу никаких ссылок, это то, как достичь третьей пули.

, например, учитывая следующее добавляются компоненты Dynami c (при условии, что ComponentX ссылается на реальные компоненты в классе)

addComponents(vContRef: ViewContainerRef, factoryRslv: ComponentFactoryResolver) {

  const items = [ComponentA, ComponentB, ComponentA];
  
  items.forEach( (comp, index) => {

    const factory = factoryRslv.resolveComponentFactory(comp);
    const compRef = vContRef.createComponent(factory);
    // Purposefully setting a property in the dynamic component so as to retrieve it later 
    compRef.instance.id = index;

  });

}

на этом этапе в viewContainer должно быть 3 компонента. то, с чем я борюсь, это

  • Как ссылаться на экземпляр компонента после того, как он был создан

, выполняя следующие действия

logViewContainerIds(vContRef: ViewContainerRef) {

  for( let i = 0; i < vContRef.children.length; i++ ) {

    const childView = vContRef.get(i);
    // the 'get' method returns a view. 

  }
}

, как показано выше, метод get() в viewContainerRef возвращает ViewRef, а я пытаюсь получить Component, связанный с этим представлением. это позволит мне получить доступ к свойствам компонента. ie childView.id;

Надеюсь, мне не хватает чего-то, что очевидно для других.

Любая помощь приветствуется.

спасибо.

...