我有以下模板:
<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
{{变量.a}} {{变量.b}}div
+ngIf
+let
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;
}
- 如果您不想创建像
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/