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

标签 html angular

我有以下模板:

<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: unknown) {
        this.context.$implicit = this.context.ngVar = context;

        if (!this.hasView) {
            this.vcRef.createEmbeddedView(this.templateRef, this.context);
            this.hasView = true;
        }
    }

    private context: {
        $implicit: unknown;
        ngVar: unknown;
    } = {
        $implicit: null,
        ngVar: null,
    };

    private hasView: boolean = false;

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

通过这个 *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>

Plunker Example Angular4 ngVar

另见

原始答案

Angular v4

  1. div + ngIf + let

    {{变量.a}} {{变量.b}}
  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;
}
  1. 如果您不想创建像 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>

正如@Keith 在评论中提到的

this will work in most cases but it is not a general solution since it relies on variable being truthy

请参阅另一种方法的更新。

关于html - 如何在 Angular 的模板中声明变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47553213/

相关文章:

javascript - 服务器登录程序

javascript - 如何用内部 div 滚动临时替换主滚动

javascript - (Angular) 拦截 HttpResponse 错误并继续 Observable

node.js - 由 : org. gradle.api.InvalidUserDataException 引起:无法添加任务 ':client:test',因为同名任务已存在

javascript - 如何在 Angular 中制作异步函数?

html - 第一个 child 不去除 margin

javascript - 学习 jQuery 的选项卡 + CSS Flexbox。任何人都可以帮助完成这项工作吗?

javascript - 使用 window.scrollY 进行 Canvas 计算会导致问题

css - 为 Angular2 中的组件加载多个样式表

angular - 从 angular2 中的指令访问路由数据