如何使用原始脚本角度选项卡和BottomNavigation进行真正的延迟加载

问题描述 投票:0回答:1

我正在使用nativescipt实现应用。我已经通过lazyLoading添加了BottomNavigation(通过在互联网上遵循一些示例),并在子页面中使用Tab组件进行了添加。代码看起来像这样

export const routes: Routes = [
{
    path: '',
    redirectTo: '/(searchTab:search//contactsTab:contacts//accountTab:account)',
    pathMatch: 'full'
},

{
    path: 'search',
    component: NSEmptyOutletComponent,
    loadChildren: () => import('@src/app/components/search/search.module').then((m) => m.SearchModule),
    outlet: 'searchTab',
},
{
    path: 'contacts',
    component: NSEmptyOutletComponent,
    loadChildren: () => import('@src/app/components/contacts/contacts.module.tns').then((m) => m.InquiriesModule),
    outlet: 'inquiriesTab',
},
{
    path: 'account',
    component: NSEmptyOutletComponent,
    loadChildren: () => import('@src/app/components/account/account.module').then((m) => m.AccountModule),
    outlet: 'accountTab',
}

];

和标准HTML(不会在此复制,因为可以在NS文档中找到)

但是,根据NS文档,-

预加载:侧面至少1个(由于滑动手势)https://docs.nativescript.org/angular/ui/ng-components/tabs

我期望只有侧选项卡会被预加载,但帐户选项卡是第三个...我会接受这种行为,因为lazyLoading至少对某些选项卡有用,但是我向所有3个选项卡组件添加了console.log()所有这些都被触发了我已经读到可以通过取消'androidOffscreenTabLimit'属性来在TabView中控制此行为]

所以问题如下:1)如何控制BottomNavigation和Tab的预加载行为2)我可以完全禁用预加载吗?3)“至少1边在边”是什么意思?

提前感谢。

angular tabs nativescript lazy-loading bottomnavigationview
1个回答
0
投票

使用标签页组件时,至少当前标签页和下一个/上一个标签页已预先加载。如果您改为BottomNavigation,则可以避免预加载。

另外,当您使用Angular&lazy加载时,通常会立即设置每个出口的路径,这将立即加载所有模块。为避免这种情况,您可以最初只为主要出口设置路径,然后将其他出口的路径设置为用户更改选项卡。但这可能会产生开销,如果背后的目的是要知道该选项卡的实际呈现时间,则可以只使用loaded事件。

HTML

         <TabContentItem>
            <GridLayout rows="0, *, auto, auto" (loaded)="onLoaded(1)">
                <page-router-outlet name="searchTab" row="1" rowSpan="2"
                    actionBarVisibility="never">
                </page-router-outlet>
                <Label row="2" class="shadow"></Label>
                <Label row="3" class="bottom-border"></Label>
            </GridLayout>
        </TabContentItem>
        <TabContentItem>
            <GridLayout rows="0, *, auto, auto" (loaded)="onLoaded(2)">
                <page-router-outlet name="accountTab" row="1" rowSpan="2"
                    actionBarVisibility="never">
                </page-router-outlet>
                <Label row="2" class="shadow">
                </Label>
                <Label row="3" class="bottom-border"></Label>
            </GridLayout>
        </TabContentItem>
        <TabContentItem>
            <GridLayout rows="0, *, auto, auto" (loaded)="onLoaded(3)">
                <page-router-outlet name="thirdTab" row="1" rowSpan="2"
                    actionBarVisibility="never">
                </page-router-outlet>
                <Label row="2" class="shadow"></Label>
                <Label row="3" class="bottom-border"></Label>
            </GridLayout>
        </TabContentItem>

TS

onLoaded(index) {
    console.log(`Tab ${index} loaded`);
}

注:加载事件可能在您每次访问标签时触发,如果您打算在此处进行API调用,则可能需要添加条件以确保是否已经加载了数据。

© www.soinside.com 2019 - 2024. All rights reserved.