gpt4 book ai didi

javascript - *ngTemplateOutlet 指令的实际场景是什么?

转载 作者:太空狗 更新时间:2023-10-29 17:23:47 25 4
gpt4 key购买 nike

我正在阅读有关 *ngTemplateOutlet 指令的内容。该指令的用途是通过模板引用和上下文对象作为参数动态实例化模板。

我想知道的是,我们在 Angular 中有很多东西可以实现与 *ngTemplateOutlet 相同的结果,例如:

  1. 我们可以有多个 *ngIf,它们可以根据同一组件中的组件变量值呈现不同的模板。以类似的方式,我们有 [ngSwitch],它会根据不同的值为我们呈现不同的模板。

  2. 我们可以通过引用相应变量的模板引用变量来使用 *ngIf 的引用。

对于前一种情况:

<div *ngIf="condition1"> Content 1 </div>
<div *ngIf="condition2"> Content 2 </div>
<div *ngIf="condition3"> Content 3 </div>

对于后者:

<ng-container *ngIf="condition then myTemplate else otherTemplate"></ng-container>
<ng-template #myTemplate> Some content... </ng-template>
<ng-template #otherTemplate> Some content... </ng-template>

如果我们的武器库中有这样的方法,*ngTemplateOutlet 还能增加什么值(value)?

在哪些实际用例(如果有的话)中我们不能使用上述方法而应该使用 *ngTemplateOutlet 指令,或者它只是另一种可供选择的方法来实现相同的结果?

最佳答案

Angular template outlets可用于在 View 的各个部分中插入通用模板,这些部分不是由循环生成的或不受条件约束的。例如,您可以为公司的 Logo 定义一个模板,并将其插入到页面的多个位置:

<div>
<ng-container *ngTemplateOutlet="companyLogoTemplate"></ng-container>
<h1>Company History</h1>
<div>{{companyHistory}}</div>
</div>
<form (ngSubmit)="onSubmit()">
<ng-container *ngTemplateOutlet="companyLogoTemplate"></ng-container>
<h1>User info</h1>
<label>Name:</label><input type="text" [(ngModel)]="userName" />
<label>Account ID:</label><input type="text" [(ngModel)]="accountId" />
<button>Submit</button>
</form>
<div class="footer">
<ng-container *ngTemplateOutlet="companyLogoTemplate"></ng-container>
</div>

<ng-template #companyLogoTemplate>
<div class="companyLogo">
<img [src]="logoSourceUrl">
<label>The ACME company, {{employeeCount}} people working for you!</label>
</div>
</ng-template>

模板和模板 socket 也有助于使组件可配置。以下示例取自 this article通过 Angular University .

选项卡容器组件定义默认选项卡标题模板,但允许使用定义为输入属性的自定义模板覆盖它。然后使用模板导出将适当的模板(默认或自定义)插入到 View 中:

@Component({
selector: 'tab-container',
template: `
<ng-template #defaultTabButtons>
<div class="default-tab-buttons">
...
</div>
</ng-template>
<ng-container *ngTemplateOutlet="headerTemplate || defaultTabButtons"></ng-container>
... rest of tab container component ...
`
})
export class TabContainerComponent {
@Input() headerTemplate: TemplateRef<any>; // Custom template provided by parent
}

在父组件中,您定义自定义选项卡标题模板并将其传递给选项卡容器组件:

@Component({
selector: 'app-root',
template: `
<ng-template #customTabButtons>
<div class="custom-class">
<button class="tab-button" (click)="login()">
{{loginText}}
</button>
<button class="tab-button" (click)="signUp()">
{{signUpText}}
</button>
</div>
</ng-template>
<tab-container [headerTemplate]="customTabButtons"></tab-container>
`
})
export class AppComponent implements OnInit {
...
}

您可以在 this blog post 中查看另一个高级用例通过 alligator.io .

关于javascript - *ngTemplateOutlet 指令的实际场景是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52908844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com