zhangbo1_wd

页面布局里拆除comp解析逻辑;新增tab页面数据请求逻辑,避免初始化而大量接口请求

import { CommonConstants, CompStyle } from 'wdConstant';
import { CompDTO } from '../repository/bean/CompDTO';
import { BannerComponent } from './BannerComponent';
import { LabelComponent } from './LabelComponent';
import { TitleAbbrComponent } from './TitleAbbrComponent';
import { TitleAllComponent } from './TitleAllComponent';
/**
* comp适配器.
*/
@Component
export struct CompParser {
compDTO: CompDTO = {} as CompDTO;
compIndex: number = 0;
build() {
this.componentBuilder(this.compDTO, this.compIndex);
}
@Builder
componentBuilder(compDTO: CompDTO, compIndex: number) {
if (compDTO.compStyle === CompStyle.Label_03) {
LabelComponent({ compDTO: compDTO })
} else if (compDTO.compStyle === CompStyle.Title_Abbr_01) {
TitleAbbrComponent({ compDTO: compDTO })
} else if (compDTO.compStyle === CompStyle.Title_All_01) {
TitleAllComponent({ compDTO: compDTO })
} else if (compDTO.compStyle === CompStyle.Carousel_Layout_01) {
BannerComponent({ compDTO: compDTO })
} else {
// todo:组件未实现 / Component Not Implemented
Text(compDTO.compStyle)
.width(CommonConstants.FULL_PARENT)
.padding(10)
// .backgroundColor(Color.Brown) // 展示本页未实现的compStyle
}
}
}
\ No newline at end of file
... ...
import { CommonConstants, CompStyle, ViewType } from 'wdConstant';
import { LazyDataSource, Logger } from 'wdKit';
import { CommonConstants, ViewType } from 'wdConstant';
import { Logger } from 'wdKit';
import { CompDTO } from '../repository/bean/CompDTO';
import PageViewModel from '../viewmodel/PageViewModel';
import { EmptyComponent } from './EmptyComponent';
import { ErrorComponent } from './ErrorComponent';
import { LabelComponent } from './LabelComponent';
import { TitleAbbrComponent } from './TitleAbbrComponent';
import { TitleAllComponent } from './TitleAllComponent';
import { BannerComponent } from './BannerComponent'
import PageModel from '../viewmodel/PageModel';
import { listTouchEvent } from '../utils/PullDownRefresh';
import RefreshLayout from './page/RefreshLayout';
... ... @@ -15,6 +11,7 @@ import { RefreshLayoutBean } from './page/RefreshLayoutBean';
import NoMoreLayout from './page/NoMoreLayout';
import LoadMoreLayout from './page/LoadMoreLayout';
import CustomRefreshLoadLayout from './page/CustomRefreshLoadLayout';
import { CompParser } from './CompParser';
const TAG = 'PageComponent';
... ... @@ -24,11 +21,10 @@ export struct PageComponent {
// Group数据及子组件数据
// @State compList: LazyDataSource<CompDTO> = new LazyDataSource();
@State private pageModel: PageModel = new PageModel();
currentTopNavSelectedIndex: number = 0;
navIndex: number = 0;
pageId: string = "";
channelId: string = "";
// @Link @Watch('onChange') paIndex:number
@Link @Watch('onChange') currentTopNavSelectedIndex: number
build() {
Column() {
... ... @@ -68,7 +64,7 @@ export struct PageComponent {
LazyForEach(this.pageModel.compList, (compDTO: CompDTO, compIndex: number) => {
ListItem() {
Column() {
this.componentBuilder(compDTO, compIndex)
CompParser({ compDTO: compDTO, compIndex: compIndex });
}
}
})
... ... @@ -100,27 +96,21 @@ export struct PageComponent {
$r('app.media.ic_pull_up_load'), $r('app.string.pull_up_load_text'), this.pageModel.pullDownRefreshHeight) })
}
@Builder
componentBuilder(compDTO: CompDTO, compIndex: number) {
if (compDTO.compStyle === CompStyle.Label_03) {
LabelComponent({ compDTO: compDTO })
} else if (compDTO.compStyle === CompStyle.Title_Abbr_01) {
TitleAbbrComponent({ compDTO: compDTO })
} else if (compDTO.compStyle === CompStyle.Title_All_01) {
TitleAllComponent({ compDTO: compDTO })
} else if (compDTO.compStyle === CompStyle.Carousel_Layout_01) {
BannerComponent({ compDTO: compDTO })
} else {
// todo:组件未实现 / Component Not Implemented
Text(compDTO.compStyle)
.width(CommonConstants.FULL_PARENT)
.padding(10)
// .backgroundColor(Color.Brown) // 展示本页未实现的compStyle
async aboutToAppear() {
// 选中tab,才请求数据。拦截大量接口请求
if (this.navIndex === this.currentTopNavSelectedIndex) {
this.getData();
}
}
async aboutToAppear() {
Logger.info(TAG, `aboutToAppear id: ${this.pageId} , ${this.channelId} , navIndex: ${this.currentTopNavSelectedIndex}`);
onChange() {
if (this.navIndex === this.currentTopNavSelectedIndex) {
this.getData();
}
}
async getData() {
Logger.info(TAG, `getData id: ${this.pageId} , ${this.channelId} , navIndex: ${this.currentTopNavSelectedIndex}`);
this.pageModel.pageId = this.pageId;
this.pageModel.groupId = this.pageId;
this.pageModel.channelId = this.channelId;
... ...
... ... @@ -21,7 +21,12 @@ export struct TopNavigationComponent {
Tabs() {
ForEach(this.topNavList, (navItem: TopNavDTO, index: number) => {
TabContent() {
PageComponent({ currentTopNavSelectedIndex: index, pageId: navItem.pageId, channelId: navItem.channelId })
PageComponent({
currentTopNavSelectedIndex: $currentTopNavSelectedIndex,
navIndex: index,
pageId: navItem.pageId,
channelId: navItem.channelId
})
}
.tabBar(this.tabBarBuilder(navItem, index))
}, (navItem: TopNavDTO) => JSON.stringify(navItem));
... ...