Nativescript RadSideDrawer冻结

时间:2017-11-02 22:10:19

标签: nativescript nativescript-telerik-ui

我的Nativescript应用程序的许多页面都有RadSideDrawer。主应用程序组件具有page-router-outlet,所有其他页面都通过导航加载到此组件中。带抽屉的页面包含围绕页面内容的RadSideDrawer组件。

问题是RadSideDrawer在页面之间导航时冻结。你可以在这里看到它:

RadSideDrawer freezes

RadSideDrawer转换不顺畅。但是当我安装角度nativescript ui samples angular application抽屉时,过渡非常平滑:

ui sample is smooth

1 个答案:

答案 0 :(得分:0)

我认为最好的方法是延迟对渲染组件内部数据的访问,以便可以完成RadSideDrawer的导航(和动画)。然后,当可以访问数据时,开始呈现组件。

如果您将RxJS延迟运算符(假设您使用Observable获取数据)与ActivityIndi​​cator结合使用-可以获得很好的结果。

以下是许多可能的解决方案之一。

TS文件:

import { Component, OnInit } from "@angular/core";
import { Observable } from "rxjs";
import { EventItem } from "../../../../models/event-item.model";
import { AppStateFacadeService } from "../../../../services/app-state-facade.service";
import { delay } from "rxjs/operators";

@Component({
    selector: "Test",
    moduleId: module.id,
    templateUrl: "./test.component.html",
    styleUrls: ["./test.component.css"]
})
export class TestComponent implements OnInit {
    events$: Observable<Array<EventItem>>;

    constructor(private appStateFacade: AppStateFacadeService) {}

    ngOnInit(): void {
        this.events$ = this.appStateFacade.getEvents().pipe(delay(400));
    }
}

HTML文件:

<StackLayout *ngIf="events$ | async as events; else nocontent">
    <ListView class="list-group" [items]="events">
        <ng-template let-event="item">
            <EventItem [eventItem]="event"></EventItem>
        </ng-template>
    </ListView>
</StackLayout>
<ng-template #nocontent>
    <ActivityIndicator row="1" #activityIndicator busy="true" width="100" height="100" class="activity-indicator">
    </ActivityIndicator>
</ng-template>