【问题标题】:Change view depending on click in Angular2根据Angular2中的点击更改视图
【发布时间】:2017-04-13 21:42:01
【问题描述】:

如何更改 Angular2 模板中的视图:

<td *ngIf="hour === first">{{obj[0].from}}</td>
<td *ngIf="hour === second">{{obj[1].from}}</td>
<td *ngIf="hour === third">{{obj[2].from}}</td>

这个 td 是更大表的一部分,但你会明白其中的逻辑。

现在我在下面有另一部分模板:

<div class="info">
     <p>{{schedule[0].name}}</p>
     <p>{{schedule[1].name}}</p>
     <p>{{schedule[2].name}}</p>
</div>

我需要匹配对第一个td 的点击,以便在.info 类中只显示第一个p,而其他人将不可见,其他人也是如此:如果第二个td 是点击后,应该显示第二个p,其他的不显示,等等。

我已尝试遵循本教程:http://jilles.me/ng-click-and-ng-if-in-angular2/,但无法使其正常工作。在我的实际模板中,除了p之外还有更多的东西,但我相信逻辑应该是一样的。

我该怎么做?

谢谢大家。

【问题讨论】:

    标签: javascript jquery html angular typescript


    【解决方案1】:

    首先使用ngFor打印p如下:

    <div class="info">
         <p *ngFor="let s of schedule">{{s.name}}</p>
    </div>
    

    第二次使用索引,将hidden标签添加到p,如下:

    <div class="info">
         <p *ngFor="let s of schedule; let i = index" 
             [hidden]="hiddenIndex === i">{{s.name}}</p>
    </div>
    

    第三次在 td 上添加click 方法,该方法调用一个设置hiddenIndex 值的函数。

    <td *ngIf="hour === first" (click)="setHiddenIndex(0)">{{obj[0].from}}</td>
    <td *ngIf="hour === second" (click)="setHiddenIndex(1)">{{obj[1].from}}</td>
    <td *ngIf="hour === third" (click)="setHiddenIndex(2)">{{obj[2].from}}</td>
    

    在课堂上:

    hiddenIndex: number;
    
    setHiddenIndex(index: number) {
      this.hiddenIndex = index;
    }
    

    就是这样。我的解决方案使用hidden 而不是ngIf。我们不能在一个元素上使用ngIfngFor,所以如果你想使用ngIf,你需要以不同的方式构建你的html。

    【讨论】:

    • 谢谢。请给我一点时间:)
    • 顺便说一句,如果您只需要一个p在开始时可见,您需要在类中设置hiddenIndex: number = 0(第一个p元素为0)。
    • 问题在于我使用数组索引的原因是,因为 *ngFor 所有 {{schedule.name}} 都会显示出来..
    • 好的,所以您只需要打印一些时间表,对吗?然后回到你以前的代码并以同样的方式使用我的解决方案:) 只需在每个元素上手动设置 [hidden]。
    • 你帮了忙,我使用了 !== 而不是 === 并且有效。谢谢:)
    猜你喜欢
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 2019-07-27
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多