@Link引用的Object数组导致组件不走生命周期
@Link引用的Object数组导致组件不走生命周期,改用@ObjectLink引用可以,但是当数组发生变化时,在兄弟控件中@Watch方法没有回调.正集列表模块中切季的时候需要更新剧集列表,切季列表控件中的数据用@Link 引用的数组无法渲染;使用@ObjectLink可以渲染,但是数组发生变化,剧集列表中的监听@Watch接收不到;
tablist 代码如下:
@Component
export struct VodClipTabsList {
@ObjectLink tabs: ObservedArray<MGMediaInfoModuleTab>;
///当前第几季的tabId
@State currentTabId: string = '';
///点击回调
public didSelectTab?: (index: number, tab: MGMediaInfoModuleTab) => void;
private tabScroller = new Scroller();
aboutToAppear() {
if (this.tabs.length > 0 ) {
this.tabs.every((tab: MGMediaInfoModuleTab) => {
if (tab.current === 1) {
this.currentTabId = tab.tabId ?? ''
}
})
}
}
build() {
List({scroller: this.tabScroller}) {
ListItem(){
Row(){}.height('100%').width(15)
}
ForEach(this.tabs, (tabItem: MGMediaInfoModuleTab, idx: number)=> {
ListItem(){
VodClipTabItem({tab: tabItem, index: idx, isEnd:idx === (this.tabs.length - 1) ? true : false, currentTabId: this.currentTabId })
}.onClick(()=>{
this.tabItemClickHandler(tabItem, idx);
})
}, (tab: MGMediaInfoModuleTab) => tab.tabId)
ListItem(){
Row(){}.height('100%').width(15)
}
}.scrollBar(BarState.Off)
.listDirection(Axis.Horizontal)
.height(28)
.width('100%')
}
///切季
tabItemClickHandler(tab: MGMediaInfoModuleTab, index: number) {
if (this.currentTabId === tab.tabId) { return }
this.tabs.every((tab) => {
tab.current = 0;
})
tab.current = 1;
this.currentTabId = tab.tabId ?? '';
if (this.didSelectTab) {
this.didSelectTab(index, tab);
}
}
}
@Component
struct VodClipTabItem {
@Prop tab: MGMediaInfoModuleTab;
@Prop index: number;
@Prop isEnd: boolean;
@Link currentTabId: string;
build() {
Row(){
if (this.index > 0) {
Blank().width(10)
}
Text(this.tab.name).font({size: 14, weight: FontWeight.Medium}).fontColor(this.tab.tabId === this.currentTabId ? VodSkinTheme.hlColor() : VodSkinTheme.dfColor({alpha:0.4}))
if (!this.isEnd) {
Blank().width(10)
Text('/').height('100%').fontColor('rgba(0,0,0,0.2)')
}
}.justifyContent(FlexAlign.Start)
.height('100%')
}
}
//MGMediaInfoModuleTab:
export class MGMediaInfoModuleTab {
@Expose() tabId?: string; // tab id
@Expose() name?: string; // tab名称
@Expose() current: number = 0;// 是否为当前tab
@Type(()=>MGMediaInfoModuleTabItem)
@Expose() item?: MGMediaInfoModuleTabItem
}
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
弹窗组件无法调用生命周期接口
664浏览 • 1回复 待解决
监听Ability生命周期
479浏览 • 1回复 待解决
如何监听AbilitySlice的生命周期
3874浏览 • 1回复 待解决
swiper切换监听生命周期
429浏览 • 1回复 待解决
JMS 消息怎么设置生命周期呢?
1419浏览 • 1回复 待解决
如何理解和重写onBackPress生命周期
777浏览 • 1回复 待解决
如何使用AbilityStage的生命周期函数
724浏览 • 1回复 待解决
自定义组件是否有生命周期可见不可见?
525浏览 • 1回复 待解决
公共事件的生命周期是怎样的
453浏览 • 1回复 待解决
List组件的页面复写了onMeasure/onLayout生命周期,数据列表不可见
542浏览 • 1回复 待解决
组件的生命周期无法拦截或者获取到对应属性操作修改组件
542浏览 • 1回复 待解决
Web组件如何选择合适的生命周期去注入JS代码或者事件
600浏览 • 1回复 待解决
Ability的生命周期回调函数有哪些呢?
4110浏览 • 1回复 待解决
旋转屏幕,如何防止界面生命周期重启
846浏览 • 1回复 待解决
如何在页面中订阅UIAbility实例的生命周期变化
557浏览 • 1回复 待解决
卡片生命周期回调函数在哪个文件中调用
590浏览 • 1回复 待解决
自定义组件没有attach到视图树以及从视图树detach的生命周期
372浏览 • 1回复 待解决
Ability生命周期中的参数WindowStage Want能否在Worker中使用
196浏览 • 1回复 待解决
服务卡片生命周期回调函数在哪个ArkTS文件中调用
690浏览 • 1回复 待解决
如何在page中获取UIAbility生命周期做自定义逻辑
596浏览 • 1回复 待解决
是否可以在应用程序中手动调用page的生命周期函数
674浏览 • 1回复 待解决
组件的生命周期无法拦截或者获取到对应属性操作修改组件。希望回调能够暴露更多信息。
394浏览 • 1回复 待解决
服务卡片EntryFormAbility生命周期回调函数在哪个ArkTS文件中调用
606浏览 • 1回复 待解决
路由到其他页面,有无相关销毁页面的生命周期会回调
567浏览 • 1回复 待解决
FA卡片上架后在用户的服务中心展示时可否触发生命周期
562浏览 • 1回复 待解决
@objectlink装饰的变量,其修改只能传递给@observed装饰的类,@objectlink不能与@link搭配使用.
文档链接:
@Observed装饰器和@ObjectLink装饰器