Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript (Angular 2+;)在*ngFor中使用ng内容,无法访问循环变量_Javascript_Angular_Ngfor_Ng Template - Fatal编程技术网

Javascript (Angular 2+;)在*ngFor中使用ng内容,无法访问循环变量

Javascript (Angular 2+;)在*ngFor中使用ng内容,无法访问循环变量,javascript,angular,ngfor,ng-template,Javascript,Angular,Ngfor,Ng Template,如何将/project转换到循环中的插槽中,并使投影内容能够访问循环变量 假设我有一个具有以下内容的基本组件 <tr *ngFor="let data of items"> <td>{{data.title}}</td> <ng-content select="[slot]"></ng-content> </tr> {{data.title} 以及使用转换槽“槽”的子组件 {{data.categor

如何将/project转换到循环中的插槽中,并使投影内容能够访问循环变量

假设我有一个具有以下内容的基本组件

<tr *ngFor="let data of items">
    <td>{{data.title}}</td>
    <ng-content select="[slot]"></ng-content>
</tr>

{{data.title}
以及使用转换槽“槽”的子组件


{{data.category}
{{data.number}
我想要生成的HTML是

<tr>
    <td>{{data.title}}</td>
    <td>{{data.category}}</td>
    <td>{{data.number}}</td>
</tr>

{{data.title}
{{data.category}
{{data.number}

但实际发生的是“数据”没有在子组件中定义,这是有道理的。有什么方法可以让它这样工作吗?

使用
TemplateRef
可以在模板级别声明在两个组件之间起作用的模板变量。以下解决方案与您的“插槽”基础结构不完全匹配,但可能有助于进一步调查

列表.组件.ts

import { Component, Input, ContentChild, TemplateRef } from '@angular/core';

@Component({
  selector: 'list',
  template: `
    <tr class="box" *ngFor="let data of items">
      <td>{{data.title}}</td>
      <ng-template
        [ngTemplateOutlet]="template"
        [ngTemplateOutletContext]="{ $implicit: data }">
      </ng-template>
    </tr>`
})
export class ListComponent {
  @Input() items;
  @ContentChild(TemplateRef) template: TemplateRef;
  constructor() { }
}
import { Component, ContentChild, TemplateRef } from '@angular/core';

@Component({
  selector: 'wrapper',
  template: `
    <table>
      <list [items]="items">
        <ng-template let-data>
          <td>{{data.category}}</td>
          <td>{{data.number}}</td>
        </ng-template>
      </list>
    </table>`
})
export class WrapperComponent {
  items = [
    { title: 'T1', category: 'C1', number: 'N1' },
    { title: 'T2', category: 'C2', number: 'N2' },
    { title: 'T3', category: 'C3', number: 'N3' }
  ];
  @ContentChild(TemplateRef) template: TemplateRef;
  constructor() { }
}
从'@angular/core'导入{Component,Input,ContentChild,TemplateRef};
@组成部分({
选择器:“列表”,
模板:`
{{data.title}
`
})
导出类ListComponent{
@输入()项;
@ContentChild(TemplateRef)模板:TemplateRef;
构造函数(){}
}
包装器.component.ts

import { Component, Input, ContentChild, TemplateRef } from '@angular/core';

@Component({
  selector: 'list',
  template: `
    <tr class="box" *ngFor="let data of items">
      <td>{{data.title}}</td>
      <ng-template
        [ngTemplateOutlet]="template"
        [ngTemplateOutletContext]="{ $implicit: data }">
      </ng-template>
    </tr>`
})
export class ListComponent {
  @Input() items;
  @ContentChild(TemplateRef) template: TemplateRef;
  constructor() { }
}
import { Component, ContentChild, TemplateRef } from '@angular/core';

@Component({
  selector: 'wrapper',
  template: `
    <table>
      <list [items]="items">
        <ng-template let-data>
          <td>{{data.category}}</td>
          <td>{{data.number}}</td>
        </ng-template>
      </list>
    </table>`
})
export class WrapperComponent {
  items = [
    { title: 'T1', category: 'C1', number: 'N1' },
    { title: 'T2', category: 'C2', number: 'N2' },
    { title: 'T3', category: 'C3', number: 'N3' }
  ];
  @ContentChild(TemplateRef) template: TemplateRef;
  constructor() { }
}
从'@angular/core'导入{Component,ContentChild,TemplateRef};
@组成部分({
选择器:“包装器”,
模板:`
{{data.category}
{{data.number}
`
})
导出类包装器组件{
项目=[
{标题:'T1',类别:'C1',编号:'N1'},
{标题:'T2',类别:'C2',编号:'N2'},
{标题:'T3',类别:'C3',编号:'N3'}
];
@ContentChild(TemplateRef)模板:TemplateRef;
构造函数(){}
}

我还创建了一个…

在哪里调用子组件?@developer033我在另一个组件中调用子组件。因此,
子组件通过xhr获取进入项的数据,并将其传递给父组件,如下所示:{{data.category}{{data.number}完全正确。我正在尝试将“数据”——循环变量输入到子组件中,就像你通常在twig中一样。例如,听起来你想要这样:@RudolfOlah我看过那个教程。我使用的是多时隙转换/投影,但这里的问题是,我使用的是循环中的时隙。