HarmonyOS 关于Progress组件的value双向绑定问题
在Progress组件示例里,value是用@state声明的
@State value: number = 0
如果要在工具类里调用Progress组件,怎么创建双向绑定的value?
class ProgressDialogParams {
title: string = "";
text: string = "";
value: number = 0;
cancel: Function;
constructor(title: string, text: string, value: number, cancel: Function) {
this.title = title;
this.text = text;
this.value = value;
this.cancel = cancel;
}
}
@Builder
function buildProgress(params: ProgressDialogParams) {
Column() {
Column() {
Text(params.title)
.width('100%')
.padding(10)
.fontSize(20)
.fontWeight(FontWeight.Bold)
Text(params.text)
.width('100%')
.fontSize(16)
.padding(10)
Row() {
Progress({value: params.value, total: 100, type:ProgressType.Linear})
.style({strokeWidth: 20, enableSmoothEffect: true})
}
.margin({ bottom: 10 })
Row() {
Button("取消", {
type: ButtonType.Normal,
buttonStyle: ButtonStyleMode.NORMAL
}).onClick(() => {
params.cancel();
})
}
}
.width('90%')
.borderRadius(borderRadiuses(20))
.backgroundColor('#FFF0F0F0')
.padding({
top: 20,
bottom: 20,
left: 10,
right: 10
})
}
.height('100%')
.justifyContent(FlexAlign.Center)
}
export class ProgressDialogFactory {
windowStage: window.WindowStage = AppStorage.get('windowStage') as window.WindowStage;
uiContext = this.windowStage.getMainWindowSync().getUIContext();
pa = this.uiContext.getPromptAction();
contentNode: ComponentContent<Params> | null = null;
openDialog(title: string, text: string, value: number) {
let cancel = () => {
this.closeDialog();
}
try {
this.contentNode =
new ComponentContent(this.uiContext, wrapBuilder(buildProgress), new ProgressDialogParams(title, text, value, cancel));
this.pa.openCustomDialog(this.contentNode, {
autoCancel: false
});
} catch (error) {
let message = (error as BusinessError).message;
let code = (error as BusinessError).code;
console.error(`OpenCustomDialog args error code is ${code}, message is ${message}`);
}
}
closeDialog() {
this.pa.closeCustomDialog(this.contentNode);
}
}
export const downloadFile = (url: string, path: string = 'DOWNLOAD') => {
let context = getContext() as common.UIAbilityContext;
let filePath = `${context.filesDir}/${path}`;
let value = 0; // 此处声明value
const controller: ProgressDialogFactory = new ProgressDialogFactory();
controller.openDialog('版本更新', '下载中,请稍候...', value);
request.downloadFile(context, {
url,
filePath
}, (err: BusinessError, downloadTask: request.DownloadTask) => {
if (err) {
console.error(JSON.stringify(err))
return;
}
downloadTask.on('progress', (size: number, total: number) => {
value = Math.ceil(size / total) * 100; // 此处value改变不会影响Progress进度
})
downloadTask.on('complete', async () => {
console.log(JSON.stringify(result));
controller.closeDialog();
})
})
}
// EntryAbility.ets
onWindowStageCreate(windowStage: window.WindowStage): Promise<void> {
...
AppStorage.setOrCreate('windowStage', windowStage);
}
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
HarmonyOS $$双向绑定问题
318浏览 • 1回复 待解决
HarmonyOS Progress 修改value时,如何取消动画
71浏览 • 1回复 待解决
父子组件之间如何建立双向的数据绑定?
540浏览 • 2回复 待解决
HarmonyOS 无法使用$$双向绑定
900浏览 • 1回复 待解决
HarmonyOS如何实现双向数据绑定
507浏览 • 1回复 待解决
@State与@Link的双向绑定,和@Provide与@Comsume的双向绑定的区别是什么?
505浏览 • 2回复 待解决
#鸿蒙通关秘籍#如何双向绑定TabBar组件和Tab组件的数据?
129浏览 • 1回复 待解决
ArkTS简单类型变量双向数据绑定
1516浏览 • 1回复 待解决
HarmonyOS HSP包中Slider组件使用$$双向绑定数据编译时报错
80浏览 • 1回复 待解决
HarmonyOS 组件外定义的class如何合内部UI做双向绑定,以及interface的用法?
327浏览 • 1回复 待解决
在同一组件内,组件和变量如何建立双向绑定?
483浏览 • 2回复 待解决
HarmonyOS 有没有办法让一个@Link双向绑定的变量,同时支持不与父组件绑定,而是手动赋值
329浏览 • 0回复 待解决
请教个问题,在不使用双向绑定的情况下如何主动刷新UI?
1837浏览 • 1回复 待解决
使用chart组件progress类型的进度条,如何使进度实时变化,修改segments中的value不行啊?
6207浏览 • 1回复 待解决
HarmonyOS Slider组件onChange返回value失精问题
83浏览 • 1回复 待解决
字母表与侧标滚动栏的双向绑定
816浏览 • 1回复 待解决
HarmonyOS关于JSVM中JSVM_Value对象生命周期管理的问题
354浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在HarmonyOS中使用@Link装饰器实现父子组件的双向数据绑定?
167浏览 • 1回复 待解决
在不使用双向绑定的情况下,是否可以主动通过函数触发组件的刷新
423浏览 • 1回复 待解决
HarmonyOS 关于video组件的问题
44浏览 • 1回复 待解决
HarmonyOS 关于Navigation组件的问题
495浏览 • 1回复 待解决
基于Progress组件的进度条
572浏览 • 1回复 待解决
HarmonyOS Resource获取value问题
60浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在ArkTS中实现子组件通过@Link实现与父组件的双向数据绑定?
208浏览 • 1回复 待解决
HarmonyOS 获取Resource中的value问题
481浏览 • 1回复 待解决
类的每次实例化跟上一次都没关系,每一次实例化的value都是0,数据无法与工具类中属性建立双向绑定关于数据双向绑定可参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-link-V5