angular – ng2:如何在ngFor循环中创建变量

我试图找出如何在ngFor循环中创建一个变量.

我有一个这样的循环:

<td *ngFor="#prod of products">
  <a href="{{getBuild(branch,prod)?.url}}">
    {{getBuild(branch,prod)?.status}}
   </a>
</td>

您可以看到“getBuild”调用必须重复多次. (在实际的例子中有更多的次数).我想要一种在循环中创建这个变量的方法,只需重新使用它.有没有办法做到这一点?

我认为局部变量(用#字符定义)不适用于你的用例.

实际上,当您在HTML元素上定义一个局部变量时,它对应于组件(如果有的话).当元素上没有组件时,该变量指的是元素本身.

指定局部变量的值允许您选择与当前元素相关联的特定指令.例如:

<input #name="ngForm" ngControl="name" [(ngModel)]="company.name"/>

将设置与name变量中当前相关联的ngForm指令的实例.

因此,局部变量不针对您想要的内容,即设置为循环当前元素创建的值.

如果你尝试做这样的事情:

<div *ngFor="#elt of eltList" >
  <span #localVariable="elt.title"></span>
  {{localVariable}}
</div>

您将出现以下错误

Error: Template parse errors:
There is no directive with "exportAs" set to "elt.title" ("
  <div *ngFor="#elt of eltList" >
    <span [ERROR ->]#localVariable="elt.title"></span>
    {{localVariable}}
  </div>
"): AppComponent@2:10

Angular2实际上寻找一个与提供的名称elt.title匹配的指令)…看到这个plunkr来重现错误https://plnkr.co/edit/qcMGr9FS7yQD8LbX18uY?p=preview

有关详细信息,请参阅此链接http://victorsavkin.com/post/119943127151/angular-2-template-syntax,“局部变量”一节.

除了迭代的当前元素之外,ngFor只提供一组导出值,可以将其替换为局部变量:index,last,even和odd.

请参阅此链接https://angular.io/docs/ts/latest/api/common/NgFor-directive.html

你可以做的是创建一个子组件来显示循环中的元素.它将接受当前元素作为参数,并将“局部变量”创建为组件的属性.然后,您将能够在组件的模板中使用此属性,因此它将在循环中的每个元素创建一次.以下是一个示例:

@Component({
  selector: 'elt',template: `
    <div>{{attr}}</div>
  `
})
export class ElementComponent {
  @input() element;

  constructor() {
    // Your old "localVariable"
    this.attr = createAttribute(element.title);
  }

  createAttribute(_title:string) {
    // Do some processing
    return somethingFromTitle;
  }
}

和使用方式:

<div *ngFor="#elt of eltList" >
  <elt [element]="elt></elt>
</div>

相关文章

ANGULAR.JS:NG-SELECTANDNG-OPTIONSPS:其实看英文文档比看中...
AngularJS中使用Chart.js制折线图与饼图实例  Chart.js 是...
IE浏览器兼容性后续前言 继续尝试解决IE浏览器兼容性问题,...
Angular实现下拉菜单多选写这篇文章时,引用文章地址如下:h...
在AngularJS应用中集成科大讯飞语音输入功能前言 根据项目...
Angular数据更新不及时问题探讨前言 在修复控制角标正确变...