Javascript 将唯一值添加到每个迭代元素2

Javascript 将唯一值添加到每个迭代元素2,javascript,html,angular,Javascript,Html,Angular,我对角度2有问题。 我想制作如下HTML列表: <ul> <li> <li>.. </ul> (click)="showNameG{{index}}= !showNameG{{index}}" 使用item,创建属性showNameG,并切换其值 <li *ngFor="let item of geoNames | filterBy: userFilter" (click)="item.showNameG=!item.sho

我对角度2有问题。 我想制作如下HTML列表:

<ul>
   <li>
   <li>..
</ul>
(click)="showNameG{{index}}= !showNameG{{index}}" 

使用
item
,创建属性
showNameG
,并切换其值

<li *ngFor="let item of geoNames | filterBy: userFilter" (click)="item.showNameG=!item.showNameG" ></li>


*ngFor
提供了一个
索引
上下文变量

<li *ngFor="let item of geoNames | filterBy: userFilter; let i=index"
    (click)="showNameG[i]= !showNameG[i]" ><a>{{ item.name }}</a></li>

您必须将以下内容添加到*ngFor中:

let index = index;
最后,您应该有以下内容:

<ul>
  <li   *ngFor="let item of geoNames | filterBy: userFilter; let index = index;" (click)="showNameG[index] = !showNameG[index]" ><a>{{ item.name }}</a></li>
</ul>

    有一个很好的解释手册页面。在理想的世界中,我同意这是最佳实践(以及我所做的)。但既然OP在AnguarJS上下文中提到了
    索引
    ,那么向他们展示同样的东西可能会很方便。@NeilLunn,正如Günter Zöchbauer已经提到的,现在添加将贬低他的答案。因此,暂时坚持使用此解决方案无法工作,因为项的名称可以是2个或多个单词。是的,它正在工作,但如何在*ngIf DictionaryComponent.html:10错误类型错误:无法读取未定义此错误的属性“0”,当我单击它时,我有点误解了您的问题。在components类中,您需要类似于
    (单击)=“self.['showName'+i]=!self.['showName'+i]
    get self(){return this;}
    。甚至可能
    (单击)=“this.['showName'+i]=”!这个。['showName'+i]
    可以工作(没有额外的getter),但我不确定。只是一个额外的提示:
    {{}
    永远不会与
    [foo]
    (foo)
    一起工作。要么是一个,要么是另一个,但决不能两者兼而有之。
    export class MyComponent {
      get self() { 
        return this;
      }  
    }
    
    let index = index;
    
    <ul>
      <li   *ngFor="let item of geoNames | filterBy: userFilter; let index = index;" (click)="showNameG[index] = !showNameG[index]" ><a>{{ item.name }}</a></li>
    </ul>