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