首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angular4模板

Angular4模板
EN

Stack Overflow用户
提问于 2017-09-07 14:59:35
回答 2查看 313关注 0票数 1

我编写了一个简单的代码来演示ngTemplate

代码语言:javascript
复制
   <div> <ng-container [ngTemplateOutlet] ="template1"> </ng-container></div>

下面是模板

代码语言:javascript
复制
 <ng-template #template1> This is 1st template </ng-template>
 <ng-template #template2>This is 2nd template </ng-template>

它按预期工作,但我的问题是无法将动态值传递给[ngTemplateOutlet]

我想实现这样的目标

代码语言:javascript
复制
<div> <ng-container [ngTemplateOutlet] ="selectTemplate"></ng-container> </div>

它将选择template1template2

每当我传递一些在我的类型记录文件中定义的动态值时,它给出的是错误。

ERROR TypeError: templateRef.createEmbeddedView is not a function

我的类型记录文件包含以下代码

代码语言:javascript
复制
if(some condition) {
     this.selectTemplate = "template1";
} else {
     this.selectTemplate = "template2";
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-07 15:08:30

在第一个示例中,将ngTemplateOutlet绑定到表达式template1的值,该表达式是第一个ngTemplate元素。到目前一切尚好。

在第二个示例中,您将ngTemplateOutlet绑定到表达式selectTemplate的值,它不是一个模板元素--您已经将它设置为一个字符串!

要解决这个问题,首先需要使用ViewChild注释将模板引用作为字段添加到组件中:

代码语言:javascript
复制
@ViewChild('template1') template1;
@ViewChild('template2') template2;

然后将selectTemplate设置为引用元素本身,而不是其名称:

代码语言:javascript
复制
if (some condition) {
     this.selectTemplate = this.template1;
}
else {
     this.selectTemplate = this.template2;
}

注意,在初始化组件的视图之前,不会设置ViewChild变量--您可以使用ngViewAfterInit钩子来等待这种情况的发生。

票数 2
EN

Stack Overflow用户

发布于 2017-09-07 15:07:31

更新角5

ngOutletContext被重命名为ngTemplateOutletContext

另见https://github.com/angular/angular/blob/master/CHANGELOG.md#500-beta5-2017-08-29

原始

您可以传递上下文。

代码语言:javascript
复制
<ng-container [ngTemplateOutlet]="template1; context: {foo: 'foo', bar: 'bar', $implicit: 'implit' }"

在模板中,您可以像这样使用它

代码语言:javascript
复制
<ng-template #template1 let-foo1="foo" let-foo2="bar" let-item>
  This is 1st template
  <div>foo1: {{foo1}}</div> 
  <div>foo2: {{foo2}}</div>      
  <div>foo1: {{item}}</div>    
 </ng-template>

我希望我用的名字不要太混乱。我试着区分一下

  • 作为值传递给上下文的名称。
  • 在模板中使用的名称。
  • $implicit,它不需要模板变量定义(let-item)中的="somename"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46099585

复制
相关文章

相似问题

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