次のテンプレートがあります:
<div>
<span>{{aVariable}}</span>
</div>
そして最終的に次のようになることを望んでいます:
<div "let a = aVariable">
<span>{{a}}</span>
</div>
それを実行する方法はありますか?
ベストアンサー1
アップデート
のようなディレクティブを作成して*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>
参照
元の回答
角度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>
コンポーネント.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がコメントで述べたように
これはほとんどの場合に機能しますが、変数が真であることに依存するため、一般的な解決策ではありません。
別のアプローチについては更新を参照してください。