HarmonyOS 鸿蒙Next 弹出对话框

发布于 1周前 作者 zlyuanteng 最后一次编辑是 5天前 来自 鸿蒙OS
import promptAction from '@ohos.promptAction'
let customDialogId: number = 0
@Builder
function customDialogBuilder() {
Column() {
Text('Custom dialog Message').fontSize(10)
Row() {
Button("确认").onClick(() => {
promptAction.closeCustomDialog(customDialogId)
})
Blank().width(50)
Button("取消").onClick(() => {
promptAction.closeCustomDialog(customDialogId)
})
}
}.height(200).padding(5)
}

@Entry
@Component
struct Index {
@State message: string = 'Hello World'

build() {
Row() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
.onClick(() => {
promptAction.openCustomDialog({
builder: customDialogBuilder.bind(this)//1,此this是什么类型,在非页面中怎么获得指向页面的this
}).then((dialogId: number) => {
customDialogId = dialogId
})
})
}
.width('100%')
}
.height('100%')
}
}

我想要在工具类中弹出对话框,开发文档上有以上代码,在页面中运行以上代码,在api12中提示““Function.bind” is not supported (arkts-no-func-bind)”,但是实际是可以执行,我想请教下为什么,除此之外我想在工具类中使用上述方式弹出对话框,注释1处的this具体是什么类型,如果是页面,那么怎么在工具类中方便的取得指向页面的this


更多关于HarmonyOS 鸿蒙Next 弹出对话框的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复
在ArkTS中,this的语义仅限于传统的OOP风格,函数体中是禁止使用this的。该this指的是这个页面本身。此处可通过手工包装,多使用一层调用的方式解决。

```

您可以参考下面这种方式:

export function testPromptDialog() {

  let url = "http://localhost:9588/product/list";

  httpRequestGet(url).then((data: ResponseResult) => {

    if (data.code != CommonConstant.SERVER_CODE_SUCCESS) {

      const that = GlobalContext.getContext().getObject('UIContext') as UIContext;

      if (that) {

        promptAction.openCustomDialog({

          alignment:DialogAlignment.Center,

          builder: customDialogBuilder.bind(that, "网络请求失败!")

        }).then((dialogId: number) => {

          customDialogId = dialogId;

        })

      }

    }

  }).catch(() => {

  });

}

```

GlobalContext其实是构建单例对象,这块您可以参考官方文档:

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-more-cases-V5

更多关于HarmonyOS 鸿蒙Next 弹出对话框的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next系统中,弹出对话框(Dialog)的操作通常依赖于系统提供的UI组件框架。以下是如何在鸿蒙系统中实现弹出对话框的基本方法:

  1. 创建对话框布局: 首先,需要在XML文件中定义对话框的布局。这包括对话框的标题、内容、按钮等元素。布局文件应放置在resources/layout目录下。

  2. 实例化对话框: 在代码中,通过Dialog类或其子类(如CommonDialog)来实例化对话框。使用setContentView方法加载之前定义的布局文件。

  3. 设置对话框属性: 可以设置对话框的标题、是否可取消、是否显示动画等属性。通过setTitlesetCancelable等方法进行设置。

  4. 显示对话框: 最后,通过调用show方法将对话框显示出来。通常,这会在某个事件触发时(如按钮点击)进行。

  5. 处理对话框事件: 为对话框中的按钮设置点击事件监听器,以处理用户交互。

示例代码(伪代码,具体实现需根据鸿蒙API调整):

// 伪代码,实际应使用鸿蒙API
Dialog dialog = new CommonDialog(context);
dialog.setContentView(R.layout.dialog_layout);
dialog.setTitle("标题");
dialog.setCancelable(false);
dialog.show();

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部