首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >*ngFor使用异步管道进行本地赋值,并减少订阅数量

*ngFor使用异步管道进行本地赋值,并减少订阅数量
EN

Stack Overflow用户
提问于 2018-02-01 22:08:03
回答 1查看 119关注 0票数 1

在我编写的自定义角组件的模板文件中有类似于以下代码的代码:

代码语言:javascript
复制
<item
    [class.disabled]="domain?.disabled | async"
    [class.hidden]="!(domain?.subscribed | async) && !showHiddenDomains || (domain?.deleted | async)"
    [disabled]="domain?.disabled | async"
    [hideHealth]="true"
    *ngFor="let domain of (forest?.domains | async)"
    [status]="domain?.status | async"
    (expand)="collapseDomain($event, domain)">
    <span header>
        <div [class.container-disabled]="!(domain?.disabled | async) && !(domain?.iconType | async)">
            <spinner-2 [promise]="spinnerPromise" *ngIf="domain?.disabled | async"></spinner-2>
            <font-icon class="domain-header-icon-{{domain?.statusString | async}}" [type]="domain?.iconType | async" *ngIf="!(domain?.disabled | async)"></font-icon>
        </div>
        <div>{{domain.name}}</div>
    </span>
    .
    .
    .

我一直在阅读的文章,我想知道我是否可以利用页面底部讨论的*ngIf with local assignment。我读过这个:

在这里,我们创建了一个局部模板变量,该变量的角度分配来自可观测值的值。这允许我们直接与用户对象交互,而不必一遍又一遍地使用异步管道。

页面上,我想知道我是否可以利用这一点,这样我就不必一次又一次地重复使用异步管道,因为我觉得它大大降低了我页面上的性能。

有什么想法?谢谢

更新

通过将ng-containers封装在代码块上,我已经能够将大部分代码简化为这种方式,例如:

代码语言:javascript
复制
<ng-container *ngIf="forest?.domains | async as domains">
    <div *ngFor="let domain of domains">
        .
        .  
        .
    </div>
</ng-container>

其中一些域具有以下形式的属性:

代码语言:javascript
复制
property: Observable.from([true]);

有人知道上面写的是什么吗?

EN

回答 1

Stack Overflow用户

发布于 2018-02-01 22:21:14

假设domain中的每个domains对象都是可订阅的条目。

只需如下所示创建一个名为ItemHeader的组件,并将订阅压缩为一个。

更改html,如下所示

代码语言:javascript
复制
<item
    [class.disabled]="domain?.disabled | async"
    [class.hidden]="!(domain?.subscribed | async) && !showHiddenDomains || (domain?.deleted | async)"
    [disabled]="domain?.disabled | async"
    [hideHealth]="true"
    *ngFor="let domain of (forest?.domains | async)"
    [status]="domain?.status | async"
    (expand)="collapseDomain($event, domain)">
    <item-header [domain]="domain | async"></item-header>
    .
    .
    .

//item-header.component.ts .Component.ts

代码语言:javascript
复制
@Component({
  selector: 'item-header',
  templateUrl: './item-header.component.html'
})
export class ItemHeaderComponent implements OnInit {
 @Input() domain: Domain 
 constructor(){}

}

//item-item er.Component.html

代码语言:javascript
复制
<span header>
        <div [class.container-disabled]="!(domain?.disabled | async) && !(domain?.iconType | async)">
            <spinner-2 [promise]="spinnerPromise" *ngIf="domain?.disabled | async"></spinner-2>
            <font-icon class="domain-header-icon-{{domain?.statusString | async}}" [type]="domain?.iconType | async" *ngIf="!(domain?.disabled)"></font-icon>
        </div>
        <div>{{domain.name}}</div>
    </span>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48572560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档