HarmonyOS 鸿蒙Next promptAction.openCustomDialog只能在@Component修饰的文件中使用吗?

发布于 1周前 作者 vueper 来自 鸿蒙OS

HarmonyOS 鸿蒙Next promptAction.openCustomDialog只能在@Component修饰的文件中使用吗? 我想使用promptAction自定义一个弹窗,并且能在所有文件中使用,不只是compcomponent修饰的文件,但是promptAction.openCustomDialog需要bind(this),在非component文件中,这个this要使用什么呢,还是promptAction.openCustomDialog就只能在compcomponent修饰的文件中使用?

11 回复

楼主您好,

在API 12中,openCustomDialog支持全局自定义弹框,不依赖UI组件,依赖UIContext,支持在非页面文件中使用,支持传参动态改变弹窗内容等。

详情可参考文档:openCustomDialog

更多关于HarmonyOS 鸿蒙Next promptAction.openCustomDialog只能在@Component修饰的文件中使用吗?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


终于出了一个正常的弹窗了,以前的太难用了,

接2楼使用UIContext.getPromptAction(),示例如下:

import { ComponentContent, promptAction } from '@kit.ArkUI';

export function doSomething(context: UIContext) {
    showCustomDialog(context);
}

@Builder
function SampleDialogStyle(param?: DialogParam) {
    Column() {
        Text('Title')
            .fontSize('36lpx')
            .fontColor('#333333')
        Text('This is content,多了换行,')
            .fontSize('32lpx')
            .fontColor('#666666')
            .width('100%')
            .textAlign(TextAlign.Center)
            .constraintSize({ minHeight: '100lp' })
        Row() {
            Button() {
                Text('取消')
            }
            .width('200lpx')
            .height('100lpx')
            .backgroundColor('#e8e8e8')
            .onClick(() => {
                param?.closeFunc?.();
            })
            Button() {
                Text('确定')
            }
            .width('200lpx')
            .height('100lpx')
            .backgroundColor('#FA3246')
            .onClick(() => {
                param?.closeFunc?.();
            })
        }
        .width('100%')
        .justifyContent(FlexAlign.SpaceEvenly)
    }
    .width('80%')
    .padding('20lpx')
    .backgroundColor(Color.White)
    .borderRadius('24lpx')
}

export function showCustomDialog(context: UIContext) {
    const dialogParam: DialogParam = {};
    const contentNode = new ComponentContent(context, wrapBuilder(SampleDialogStyle), dialogParam);
    const promptAction = context.getPromptAction();
    dialogParam.closeFunc = () => {
        promptAction.closeCustomDialog(contentNode);
    }
    promptAction.openCustomDialog(contentNode, {
        alignment: DialogAlignment.Center,
        autoCancel: false
    });
}

interface DialogParam {
    closeFunc?: () => void
}

// 这个是在UI里面测试,不在UI中,需要传入UIContext
Button('测试', { type: ButtonType.Normal, stateEffect: true })
    .borderRadius('16lpx')
    .width('80%')
    .margin(10)
    .onClick(() => {
        doSomething(this.getUIContext())
    })

同样的问题,这个注入的builder,应该写在哪里?普通类里面不能直接调用,调用就崩溃。写上去不报错

姓名: 张三
职位: 软件工程师
简介: 拥有超过10年的软件开发经验,熟悉Java、Python和C++。

是需要有上下文

有要学HarmonyOS AI的同学吗,联系我:https://www.itying.com/goods-1206.html

这个上下文可以从页面里面传入到公共方法中吗?我试了,不行啊,

您好,解决了吗?我也是遇到要在逻辑类里去弹出弹窗,不知道怎么写了,,

姓名: 张三
职位: 软件工程师
简介: 拥有超过10年的软件开发经验,擅长Java和Python。在多个领域都有项目经验,包括Web开发、移动应用和大数据处理。

HarmonyOS 鸿蒙中,promptAction.openCustomDialog 并非只能在被 @Component 修饰的文件中使用

在 HarmonyOS 开发中,promptAction.openCustomDialog 方法用于打开自定义对话框。虽然该方法通常在组件(如 Ability 或 Page)的上下文中被调用,但并不意味着它必须严格在带有 @Component 注解的文件中才能使用。

实际上,openCustomDialog 方法是 Ability 类的一个成员方法,因此,只要能够访问到 Ability 类的实例,就可以调用此方法。这意味着,即使在一个非组件类中,只要能够获取到当前 Ability 的上下文(例如,通过依赖注入或传递上下文的方式),同样可以调用 openCustomDialog 方法来打开自定义对话框。

然而,需要注意的是,对话框的显示和交互通常与特定的用户界面组件相关联,因此在实际开发中,将对话框的调用放在与界面相关的组件类中(如 Page 类)是更为常见和合理的做法。

如果在使用 openCustomDialog 方法时遇到问题,可能是由于上下文环境不正确或对话框配置有误等原因导致。此时,应检查相关代码和配置,确保一切设置正确。

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

回到顶部