Угловые 2 включают HTML-шаблоны

В угловых 2 мне нужно создать большой HTML-шаблон с избыточными частями. Поэтому я хочу создать несколько html-шаблонов и соединить их вместе, включив их в основной html-файл (например, ng-include в angular1)

Но как я могу включить суб-шаблоны в основной шаблон?

пример:

<!-- test.html -->

<div>
    this is my Sub-Item
    <!-- include sub1.html here-->
</div>
<div>
    this is second Sub-Item
    <!-- include sub2.html here-->
</div>

-

<!-- sub1.html -->
<div>
    <button>I'am sub1</button>
</div>

-

<!-- sub2.html -->
<div>
    <div>I'am sub2</div>
</div>

2 ответа

Решение

Вы можете создавать такие компоненты, как sub1 sub2 и т. Д. И на эти дочерние компоненты добавить эти HTML-файлы в качестве шаблона.

На основной html вызовите селекторы компонентов соответственно. Это будет работать

Позвольте мне прежде всего сказать вам, что ng-include от Angular1.x не поддерживается Angular2 так очевидно $Compile нет в Angular2, Итак, вы можете продолжить CRF-ComponentFactoryResolver как показано здесь, чтобы добавить HTML динамически с угловым контекстом.

ДЕМО - (CFR): https://plnkr.co/edit/YdRlULhWQR3L3akAr2eb?p=preview


Если ваш HTML-фрагмент имеет угловой контекст, вы должны использовать CFR-ComponentFactoryResolver,

Как в sub1.html, у тебя есть button Вы можете щелкнуть по нему и запустить событие щелчка. Это может быть достигнуто с CFR как показано ниже,

Вы можете многое сделать с CRF, Это, наверное, самый простой пример.

@Component({
  selector: 'my-app',
  template: `

     <button (click)="addComponents()">Add HTML (dynamically using CRF)</button>

     <h1>Angular2 AppComponent</h1>
     <hr>

     <div>
     <h5>sub1.html goes here</h5>
      <div class="container">
        <template #subContainer1></template>
      </div>
     </div>

     <hr>
     <h5>sub2.html goes here</h5>
     <div class="container">
        <template #subContainer2></template>
     </div>
  `,

})
export class App {
    name:string;
    @ViewChild('subContainer1', {read: ViewContainerRef}) subContainer1: ViewContainerRef;
    @ViewChild('subContainer2', {read: ViewContainerRef}) subContainer2: ViewContainerRef;
    constructor(
      private compFactoryResolver: ComponentFactoryResolver
      ) {
      this.name = 'Angular2'
    }

    addComponents() {

      let compFactory: ComponentFactory;

      compFactory = this.compFactoryResolver.resolveComponentFactory(Part1Component);
      this.subContainer1.createComponent(compFactory);


      compFactory = this.compFactoryResolver.resolveComponentFactory(Part2Component);
      this.subContainer2.createComponent(compFactory);
    }
  }
}
Другие вопросы по тегам