【问题标题】:Angular let- doesn't set a local variableAngular let- 不设置局部变量
【发布时间】:2019-12-22 13:11:48
【问题描述】:

我正在尝试在<ng-template> 中设置一个局部变量,但似乎let- 不起作用。

Demo

<ng-container *ngIf="data as d">
<ng-container *ngIf="false; else testBlock"></ng-container> 
<ng-template #testBlock let-x="d">
  data:{{data | json}} <br />
  d:{{d | json}} <br />
  x:{{x | json}} <br /> <!-- let-x didn't work !! -->
</ng-template>
</ng-container>

备注

data 对象比这个例子复杂,所以我需要设置一个局部变量为数据的深层属性,以避免重复访问它。

即:使用{{x.something}} 而不是{{data.payload.prob1.prob2.something}}

【问题讨论】:

    标签: angular angular-directive angular-ng-if angular-template


    【解决方案1】:

    您需要一个 ngTemplateOutlet 上下文来将变量传递给 ng 模板。 ngTemplateOutletContext 应该是一个对象,对象的键将可用于本地模板 let 声明的绑定。

    <ng-container
      [ngTemplateOutlet]="false ? originalBlock : testBlock" 
      [ngTemplateOutletContext]="{data: data}"> 
    </ng-container>
    
    <ng-template #originalBlock let-d="data">
      data:{{data | json}} <br />
      d:{{d | json}} <br />
    </ng-template>
    
    <ng-template #testBlock let-x="data">
      data:{{data | json}} <br />
      x:{{x | json}} <br />
    </ng-template>
    

    【讨论】:

    • 它成功了,但是为什么我们应该传递[ngTemplateOutletContext]="{data: data}" 而不是[ngTemplateOutletContext]="data",即使data 本身就是一个对象?
    • 是的,你可以直接通过。但请记住,只有对象的键在 ng-template 中可用
    猜你喜欢
    • 2018-06-04
    • 2013-08-30
    • 1970-01-01
    • 2015-02-16
    • 2022-01-07
    • 2017-04-05
    • 2016-05-14
    • 1970-01-01
    相关资源
    最近更新 更多