作用域变量的实现如何在 *ngFor 中工作

Posted

技术标签:

【中文标题】作用域变量的实现如何在 *ngFor 中工作【英文标题】:How does the implementation of a scoped variable work in *ngFor 【发布时间】:2019-06-17 21:04:52 【问题描述】:

在 Angular 中,我们可以通过以下方式使用 *ngFor

<li *ngFor="let hero of heroes">
   hero 
</li>

但是Angular如何定义作用域变量hero 我能实现同样的事情吗? 我只对作用域变量感兴趣,对循环部分不感兴趣。

【问题讨论】:

【参考方案1】:

component.ts 中定义的所有公共变量(函数)都可以从 component.html 访问,并且可以使用 interpolation and template expresion 显示

当你有一个*ngFor,当你定义“让数组的变量”时,变量是可访问的inside *ngFor并且是数组的每个元素

如果要声明变量,请使用ng-if-let,例如

<div *ngIf="'hello word' as greeting">
  greeting
</div>

【讨论】:

很抱歉,我认为您的问题有误。看看我的解决方案,这样你就可以理解我的问题了。 对不起我的回答,我更新了。你在找 ng-if-let 吗? 我只是在寻找一种将作用域变量从“组件”(本例中为指令)传递给其子级的方法【参考方案2】:

好的,我能够解决我的问题。我没有意识到我自己可以使用以下语法:

*ngFor="let test...."

有了这个,我能够创建以下指令:

import  Directive, TemplateRef, ViewContainerRef  from '@angular/core';

@Directive(
  selector: '[appWrapper]',
)
export class WrapperDirective 
  constructor(viewContainer: ViewContainerRef, template: TemplateRef<any>) 
    viewContainer.createEmbeddedView(
      template,
       ['$implicit']: 'Max Mustermann' ,
      0,
    );
  

这个指令现在可以像这样使用:

<div *appWrapper="let name"> name </div>

有没有办法摆脱 let name 部分?

This *** post helped me to implement my idea

【讨论】:

以上是关于作用域变量的实现如何在 *ngFor 中工作的主要内容,如果未能解决你的问题,请参考以下文章

作用域链

作用域作用域链自由变量变量提升

作用域作用域链自由变量变量提升

函数作用域的LEGB顺序

js 作用域和作用域链

什么是快级作用域,es6中如何实现块级作用域