在Angular 2模板中传递变量

ale*_*nst 8 javascript angular

有没有办法可以将变量传递给Angular2中的模板?

假设我有以下代码:

<div *ngFor="foo in foos">
    <ng-container *ngTemplateOutlet="inner"</ng-container>
</div>

---------------

<ng-template #inner>
    {{ foo.name }}
</ng-template>
Run Code Online (Sandbox Code Playgroud)

我怎样才能获得模板打印namefoo

小智 29

你应该这样做:

<div *ngFor="foo in foos">
   <ng-container *ngTemplateOutlet="inner; context:foo"></ng-container>
</div>

<ng-template #inner let-name="name">
   {{ name }}
</ng-template>
Run Code Online (Sandbox Code Playgroud)

  • 但是如果模板位于另一个组件中,这将不起作用。在这种情况下如何传递上下文对象? (2认同)

Kis*_*nga 14

在我的情况下,我需要对象保持完整,因为我有某种递归,这有效

<div *ngFor="foo in foos">
   <ng-container *ngTemplateOutlet="inner; context: {foo : foo}"></ng-container>
</div>

<ng-template #inner let-foo="foo">
   {{ foo.attributexy }}
</ng-template>
Run Code Online (Sandbox Code Playgroud)

  • 对我来说,这个答案有效,而不是公认的答案。我正在使用 Angular 8,也许这就是原因。 (2认同)

小智 6

但是如果模板位于另一个组件中,这将不起作用。在这种情况下如何传递上下文对象?

我加了
@Input() itemTemplate: TemplateRef<any>;

在我将使用它的组件中,在这个组件的模板中,我写了这样的东西:

  <ng-container *ngTemplateOutlet="itemTemplate; context: item"></ng-container>
Run Code Online (Sandbox Code Playgroud)

外部组件的模板代码:

<ng-template #dataRendererTpl let-data="data">
<div class="data">Hello, {{data.name}}</div>
Run Code Online (Sandbox Code Playgroud)

只需将 dataRendererTpl 的链接作为 @Input() 属性传递给您需要它的组件