当前位置: 首页 > 面试题库 >

如何在Angular的模板中声明变量

戚飞雨
2023-03-14
问题内容

我有以下模板:

<div>
  <span>{{aVariable}}</span>
</div>

并最终以:

<div "let a = aVariable">
  <span>{{a}}</span>
</div>

有办法吗?


问题答案:

更新资料

我们可以像这样创建指令*ngIf并调用它*ngVar

ng-var.directive.ts

@Directive({
    selector: '[ngVar]',
})
export class VarDirective {
  @Input()
  set ngVar(context: any) {
    this.context.$implicit = this.context.ngVar = context;
    this.updateView();
  }

  context: any = {};

  constructor(private vcRef: ViewContainerRef, private templateRef: TemplateRef<any>) {}

  updateView() {
    this.vcRef.clear();
    this.vcRef.createEmbeddedView(this.templateRef, this.context);
  }
}

通过此*ngVar指令,我们可以使用以下命令

<div *ngVar="false as variable">
      <span>{{variable | json}}</span>
</div>

要么

<div *ngVar="false; let variable">
    <span>{{variable | json}}</span>
</div>

要么

<div *ngVar="45 as variable">
    <span>{{variable | json}}</span>
</div>

要么

<div *ngVar="{ x: 4 } as variable">
    <span>{{variable | json}}</span>
</div>

原始答案

角v4

1)div+ ngIf+let

<div *ngIf="{ a: 1, b: 2 }; let variable">
  <span>{{variable.a}}</span>
  <span>{{variable.b}}</span>
</div>

2)div+ ngIf+as

视图

<div *ngIf="{ a: 1, b: 2, c: 3 + x } as variable">
  <span>{{variable.a}}</span>
  <span>{{variable.b}}</span>
  <span>{{variable.c}}</span>
</div>

component.ts

export class AppComponent {
  x = 5;
}

3)如果您不想创建包装器div,可以使用ng-container

视图

<ng-container *ngIf="{ a: 1, b: 2, c: 3 + x } as variable">
  <span>{{variable.a}}</span>
  <span>{{variable.b}}</span>
  <span>{{variable.c}}</span>
</ng-container>

正如@基思在评论中提到的

这在大多数情况下都可以使用,但这不是通用解决方案,因为它依赖于变量是否为真

有关其他方法,请参见更新。



 类似资料:
  • 问题内容: 您如何声明和初始化要在Play2 Scala模板中本地使用的变量? 我有这个: 在模板的顶部声明,但它给了我这个错误: 问题答案: 基本上,您必须包装要使用它的块

  • 问题内容: 如何在mysql中声明变量,以便第二个查询可以使用它? 我想写一些像: 问题答案: MySQL中主要有三种类型的变量: 用户定义的变量 (以开头): 您可以访问任何用户定义的变量,而无需对其进行声明或初始化。如果引用的变量尚未初始化,则其值为和字符串类型。 您可以使用或语句来初始化变量: 要么 可以从一组有限的数据类型中为用户变量分配一个值:整数,十进制,浮点数,二进制或非二进制字符串

  • 问题内容: 我有一个Netezza查询,在其中我引用了一系列案例陈述中的几个日期。而不是每次我都想在开始时将一个变量置为一个变量并在整个查询中都使用它时,而不是替换所有这些日期。在SAS中,我会这样做: 问题答案: 不幸的是,Netezza中没有程序SQL扩展,您无法将这样的变量用作SQL语言本身的一部分。纯粹的SQL解决方案将涉及一些麻烦,例如加入CTE并返回该值。但是,NZSQL CLI确实允

  • 我需要声明一个可以存储不同类型容器的类。也就是说,如果它能处理STD::Bitset和STD::Array就好了。但是,这两个类需要不同的模板参数······是否可能(以及如何)使用模板化模板类和可变模板来声明此类类? 示例(但错误):

  • 模板特化可以被显式声明,这可以作为消除多重实例化的一种方式。例如: #include "MyVector.h" extern template class MyVector<int>; // 消除下面的隐式实例化 // MyVector 类将在“其他地方”被程序员显式实例化 void foo(MyVector<int>& v) { //在这个地方使用vector类型 } 下列代码就是上例

  • 问题内容: 如何在JavaScript中声明全局变量? 问题答案: 如果必须在生产代码中生成全局变量(应避免使用),请 始终 明确 声明它们: 虽然可以通过省略来定义全局变量(假设没有同名的局部变量),但这样做会生成 隐式 全局,这是一件不好的事情,并且在 严格模式下 会产生错误。