【问题标题】:ngtemplate dynamic value for template selection用于模板选择的 ng 模板动态值
【发布时间】:2018-03-11 15:21:03
【问题描述】:

此问题与ngTemplateOutlet with dynamic value有关

按照这个例子,有一个@ViewChild('one') one:TemplateRef<any>; 对于每个模板。

我正在做一个本质上是电子书的应用程序。目前我的每一页都有一个<ng-template #pagexx>。有什么方法可以避免每个页面都有@ViewChild?对于大量页面,这将变得相当乏味。

寻找一种可以从component.ts 传入表达式并将表达式计算为page6page7 的方法...

感谢您的帮助。

【问题讨论】:

  • 请提供更多代码,以便更清楚地说明您尝试完成的任务、尝试的内容以及失败的地方
  • 感谢您查看此内容。在.html<ng-container [ngTemplateOutlet]="page6"> </ng-container> 中正确选择了一个模板<ng-template #page6>。在关联的.ts 中,有这个赋值:templatePage="page6";。但是[ngTemplateOutlet]=templatePage 会产生错误。
  • 请编辑问题并在此处添加代码。 cmets 中的代码很难阅读。还请添加比评论更多的代码。您在问题中使用抽象术语,例如页面,它没有说明事物之间的关系。如果有错误,请提供完整准确的错误信息
  • 请参阅plnkr.co/edit/aps6z9NJlRAkx6hVMxug?p=preview 的代码。在第 14 行,我想使用类似于 <ng-container [ngTemplateOutlet]=templatePage> 的东西,但这会产生错误。如何从类定义中获取 templatePage 变量?

标签: angular ng-template


【解决方案1】:

模板变量不是字符串,它是元素或组件引用。例如,您可以使用@ViewChild()

来获取它
@Component({
  selector: 'my-app',
  template: `
      <h3>templatePage = {{page}}</h3>

      <button (click)="page = page == page1 ? page2 : page1">toggle</button>

       <ng-container [ngTemplateOutlet]="page1"></ng-container>

       <ng-container [ngTemplateOutlet]="page2"></ng-container>

       <ng-container [ngTemplateOutlet]="page"></ng-container>

      <ng-template #tPage1>page 1</ng-template>
      <ng-template #tPage2>page 2</ng-template>

  `,
})
export class App {
  @ViewChild('tPage1') page1:TemplateRef;
  @ViewChild('tPage2') page2:TemplateRef;
  page:TemplateRef;

  name:string;
  templatePage:string;
  constructor() {
    this.name = `Angular! v${VERSION.full}`
  }
}

Plunker example

Plunker example with ViewChildren

【讨论】:

  • 非常感谢您的帮助。我有 100 多页,所以我试图找到一种方法来构建 TemplateRef 的数组或动态地构建 TemplateRef。到目前为止,我的研究表明这是不可能的。
  • 非常感谢您对此提供的帮助。越来越近。但是我在 Angular 的任何地方都找不到@QueryChildren。我能够与@ViewChildren(TemplateRef) pageList: QueryList &lt;TemplateRef&lt;any&gt;&gt;; 非常接近。这将返回所有 &lt;ng-template&gt; 元素,并且似乎也在拾取 &lt;ng-container&gt; 子元素。再次感谢。
  • @philmagnuson 抱歉,我想我写这篇文章的时候该睡觉了。我的意思是ViewChildren。很抱歉造成混乱。
  • Gunther 已经很好地回答了这个问题,以帮助我找到解决方案。我终于使用&lt;ng-template #page&gt;@ViewChildren('page') pageList: QueryList &lt;TemplateRef&lt;any&gt;&gt;;。谢谢大家的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-12
  • 2015-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多