首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态ngTemplateOutlet值

动态ngTemplateOutlet值
EN

Stack Overflow用户
提问于 2017-04-24 07:06:05
回答 3查看 8.3K关注 0票数 11

有没有办法动态设置*ngTemplateOutlet指令的值?

一些类似的东西:

代码语言:javascript
复制
<div *ngFor="let item of [ 'div', 'span' ]">
  <ng-container *ngTemplateOutlet="{{ item }}"></ng-container>
</div>

<ng-template #div>
  <div>some text inside a div</div>
</ng-template>

<ng-template #span>
  <span>some text inside a span</span>
</ng-template>
EN

回答 3

Stack Overflow用户

发布于 2017-11-25 05:40:57

只需将TemplateRef变量指向ngTemplateOutlet即可

在HTML中:

代码语言:javascript
复制
<button (click)="toggleTemplateSelected()">Toggle Template</button>
<br />
<p>Showing 
  <span class='viewType' *ngIf="showViewTemplate">C</span>
  <span class='viewType' *ngIf="!showViewTemplate">C2</span> 
  template:</p>
<ng-container *ngTemplateOutlet='liveTemplate'></ng-container>

<!--Templates: -->
<ng-template #tmplC>
  Hello from TemplateC
</ng-template>

<ng-template #tmplC2>
  Hello from TemplateC2
</ng-template>

在代码中:

代码语言:javascript
复制
@ViewChild('tmplC') tmplC: TemplateRef<any>;
@ViewChild('tmplC2') tmplC2: TemplateRef<any>;

showViewTemplate = true;
liveTemplate: TemplateRef<any>;

toggleTemplateSelected() {
    this.showViewTemplate = !this.showViewTemplate;
    this.liveTemplate = this.showViewTemplate ? this.tmplC : this.tmplC2;
}

您还可以将ngTemplateOutlet指向一个返回TemplateRef的函数。

票数 16
EN

Stack Overflow用户

发布于 2020-12-31 20:28:50

以下是最短且最佳可行的解决方案

1创建指令"dynamic-template.directive.ts"

代码语言:javascript
复制
import { Directive, Input, TemplateRef } from '@angular/core';
@Directive({
  selector: '[dynamic-template]'
})
export class DynamicTemplateDirective {
  @Input() id: number;
  constructor(public template: TemplateRef<any>) { }
}  

Content2在组件帮助器中定义动态模板--compleent.html

代码语言:javascript
复制
<ng-template [dynamic-template] [id]="1">
  This is 1st Template
</ng-template>
<ng-template [dynamic-template] [id]="2">
  This is 2nd Template
</ng-template>
<ng-template [dynamic-template] [id]="3">
  This is 3rd Template
</ng-template>

Content3在您的组件帮助器中使用动态模板--Content.Component.ts

代码语言:javascript
复制
import { DynamicTemplateDirective } from '@app/components/dynamic-template.directive';

export class HelperContentComponent implements OnInit {
helpTemplate: TemplateRef<any>;
  @ViewChildren(DynamicTemplateDirective) templateRefs: QueryList<DynamicTemplateDirective>;

constructor(private eventService: EventEmitterService) {
  }

getTemplate(templateId: number): TemplateRef<any> {
    return this.templateRefs.toArray().find(x => x.id == templateId).template;
  }

showHelperContent(id: number) {
    
      this.helpTemplate = this.getTemplate(id);
      
     }
}

在helper-content.component.html中使用4的helpTemplate变量

代码语言:javascript
复制
<div class="content" >
      <ng-container *ngTemplateOutlet="helpTemplate"></ng-container>
    </div>
票数 1
EN

Stack Overflow用户

发布于 2017-04-24 10:58:18

将项括在圆括号中,使其作为表达式进行计算。*ngTemplateOutlet="(item.ref)"如果不起作用,执行let item of [ { ref: 'div' }, { ref: 'span'} ]并使用类似于Can't get ngTemplateOutlet to work*ngTemplateOutlet="item.ref"

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43577481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档