鸿蒙5.0开发进阶:ArkTS组件-SaveButton

往期鸿蒙5.0全套实战文章必看:(文中附带全栈鸿蒙5.0学习资料)


SaveButton

安全控件的保存控件,用户通过点击该保存按钮,可以临时获取存储权限,而不需要权限弹框授权确认。

说明

该组件从API Version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。

子组件

不支持。

接口

SaveButton

SaveButton()

默认创建带有图标、文本、背景的保存按钮。

为避免控件样式不合法导致授权失败,请开发者先了解安全控件样式的约束与限制

元服务API: 从API version 11开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

SaveButton

SaveButton(options:SaveButtonOptions)

创建包含指定元素的保存按钮。

为避免控件样式不合法导致授权失败,请开发者先了解安全控件样式的约束与限制

元服务API: 从API version 11开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名类型必填说明
optionsSaveButtonOptions创建包含指定元素的保存按钮。

SaveButtonOptions

用于指定保存按钮的图标、文本等指定元素。

说明

  • icon或text需至少传入一个。

  • 如果icon、text都不传入,SaveButton中的options参数不起效,创建的SaveButton为默认样式,默认样式:

    SaveIconStyle默认样式为FULL_FILLED;

    SaveDescription默认样式为DOWNLOAD;

    ButtonType默认样式为Capsule。

  • icon、text、buttonType不支持动态修改。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

名称类型必填说明
iconSaveIconStyle

设置保存按钮的图标风格

不传入该参数表示没有图标。

textSaveDescription

设置保存按钮的文本描述

不传入该参数表示没有文字描述。

buttonTypeButtonType

设置保存按钮的背景样式

不传入该参数,系统默认提供Capsule类型按钮。

SaveIconStyle枚举说明

元服务API: 从API version 11开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

名称说明
FULL_FILLED0保存按钮展示填充样式图标。
LINES1保存按钮展示线条样式图标。

SaveDescription枚举说明

系统能力: SystemCapability.ArkUI.ArkUI.Full

名称说明
DOWNLOAD0

保存按钮的文字描述为“下载”。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

DOWNLOAD_FILE1

保存按钮的文字描述为“下载文件”。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

SAVE2

保存按钮的文字描述为“保存”。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

SAVE_IMAGE3

保存按钮的文字描述为“保存图片”。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

SAVE_FILE4

保存按钮的文字描述为“保存文件”。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

DOWNLOAD_AND_SHARE5

保存按钮的文字描述为“下载分享”。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

RECEIVE6

保存按钮的文字描述为“接收”。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

CONTINUE_TO_RECEIVE7

保存按钮的文字描述为“继续接收”。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

SAVE_TO_GALLERY12+8

保存按钮的文字描述为“保存至图库”。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

EXPORT_TO_GALLERY12+9

保存按钮的文字描述为“导出”。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

QUICK_SAVE_TO_GALLERY12+10

保存按钮的文字描述为“快速保存图片”。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

RESAVE_TO_GALLERY12+11

保存按钮的文字描述为“重新保存”。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

SaveButtonOnClickResult枚举说明

元服务API: 从API version 11开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

名称说明
SUCCESS0保存按钮点击成功。
TEMPORARY_AUTHORIZATION_FAILED1保存按钮点击后权限授权失败。

属性

不支持通用属性,仅继承安全控件通用属性

事件

不支持通用事件,仅支持以下事件:

onClick

onClick(event: (event: ClickEvent, result: SaveButtonOnClickResult) => void)

点击动作触发该回调

元服务API: 从API version 11开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名类型必填说明
eventClickEvent见ClickEvent对象说明
resultSaveButtonOnClickResult存储权限的授权结果,授权时长为10秒,即触发点击后,可以在10秒之内不限制次数的调用特定媒体库接口,超出10秒的调用会鉴权失败。

示例

// xxx.ets
import { photoAccessHelper } from '@kit.MediaLibraryKit';
import { fileIo } from '@kit.CoreFileKit';

@Entry
@Component
struct Index {
  build() {
    Row() {
      Column({space:10}) {
        // 默认参数下,图标、文字、背景都存在
        SaveButton().onClick(async (event:ClickEvent, result:SaveButtonOnClickResult) => {
          if (result == SaveButtonOnClickResult.SUCCESS) {
            try {
              const context = getContext(this);
              let helper = photoAccessHelper.getPhotoAccessHelper(context);
              // onClick触发后10秒内通过createAsset接口创建图片文件,10秒后createAsset权限收回。
              let uri = await helper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'png');
              // 使用uri打开文件,可以持续写入内容,写入过程不受时间限制
              let file = await fileIo.open(uri, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE);
              // 写入文件
              await fileIo.write(file.fd, "context");
              // 关闭文件
              await fileIo.close(file.fd);
            } catch (error) {
              console.error("error is "+ JSON.stringify(error));
            }
          }
        })
        // 传入参数即表示元素存在,不传入的参数表示元素不存在,如果不传入buttonType,会默认添加ButtonType.Capsule配置,显示图标+背景。
        SaveButton({icon:SaveIconStyle.FULL_FILLED})
        // 只显示图标+背景,如果设置背景色高八位的α值低于0x1A,则会被系统强制调整为0xFF
        SaveButton({icon:SaveIconStyle.FULL_FILLED, buttonType:ButtonType.Capsule})
          .backgroundColor(0x10007dff)
        // 图标、文字、背景都存在,如果设置背景色高八位的α值低于0x1A,则会被系统强制调整为0xFF
        SaveButton({icon:SaveIconStyle.FULL_FILLED, text:SaveDescription.DOWNLOAD, buttonType:ButtonType.Capsule})
        // 图标、文字、背景都存在,如果设置宽度小于当前属性组合下允许的最小宽度时,宽度仍为设置值,此时按钮文本信息会自动换行,以保证安全控件显示的完整性。
        SaveButton({icon:SaveIconStyle.FULL_FILLED, text:SaveDescription.DOWNLOAD, buttonType:ButtonType.Capsule})
          .fontSize(16)
          .width(30)
        // 图标、文字、背景都存在,如果设置宽度小于当前属性组合下允许的最小宽度时,宽度仍为设置值,此时按钮文本信息会自动换行,以保证安全控件显示的完整性。
        SaveButton({icon:SaveIconStyle.FULL_FILLED, text:SaveDescription.DOWNLOAD, buttonType:ButtonType.Capsule})
          .fontSize(16)
          .size({width: 30, height: 30})
        // 图标、文字、背景都存在,如果设置宽度小于当前属性组合下允许的最小宽度时,宽度仍为设置值,此时按钮文本信息会自动换行,以保证安全控件显示的完整性。
        SaveButton({icon:SaveIconStyle.FULL_FILLED, text:SaveDescription.DOWNLOAD, buttonType:ButtonType.Capsule})
          .fontSize(16)
          .constraintSize({minWidth: 0, maxWidth: 30, minHeight: 0, maxHeight: 30})
      }.width('100%')
    }.height('100%')
  }
}

在 Vue 中动态设置工具栏按钮的 `disabled` 属性,可以通过结合 `ref` 和响应式数据来实现。以下是一个完整的解决方案: ### 使用 `ref` 和响应式数据 1. **定义响应式状态**:可以使用 `reactive` 或 `ref` 来存储按钮的状态。 2. **绑定到模板**:通过 `:disabled` 绑定按钮的 `disabled` 属性。 ```vue <template> <div> <button v-for="(button, index) in buttons" :key="index" :disabled="button.disabled"> {{ button.label }} </button> </div> </template> <script> import { reactive } from 'vue'; export default { setup() { const buttons = reactive([ { label: 'Save', disabled: false }, { label: 'Edit', disabled: true }, { label: 'Delete', disabled: false } ]); // 示例方法:根据条件更新按钮状态 function updateButtonState(index, disabled) { buttons[index].disabled = disabled; } return { buttons, updateButtonState }; } }; </script> ``` ### 动态控制逻辑 - 可以通过监听某些事件或条件来触发 `updateButtonState` 方法,从而动态修改按钮的 `disabled` 状态[^1]。 - 比如,在表单验证失败时禁用“提交”按钮,或者在数据加载完成后再启用某个操作按钮。 ### 使用 `ref` 获取 DOM 元素 如果需要直接访问 DOM 元素(例如为了执行某些原生操作),可以使用 `ref` 来获取元素引用: ```vue <template> <div> <button ref="saveButton" :disabled="isSaveDisabled">Save</button> <button @click="toggleSaveButton">Toggle Save Button</button> </div> </template> <script> import { ref } from 'vue'; export default { setup() { const isSaveDisabled = ref(true); const saveButton = ref(null); function toggleSaveButton() { isSaveDisabled.value = !isSaveDisabled.value; } return { isSaveDisabled, saveButton, toggleSaveButton }; } }; </script> ``` 在这个例子中: - `isSaveDisabled` 是一个响应式变量,用来控制按钮是否被禁用。 - `saveButton` 是一个 `ref`,它会指向模板中的按钮元素。 ### 结合计算属性和条件逻辑 你还可以使用 `computed` 属性来根据业务逻辑动态决定按钮是否应该被禁用: ```vue <template> <button :disabled="isFormInvalid">Submit</button> </template> <script> import { computed, ref } from 'vue'; export default { setup() { const formFields = ref({ name: '', email: '' }); const isFormInvalid = computed(() => { return !formFields.value.name || !formFields.value.email; }); return { formFields, isFormInvalid }; } }; </script> ``` 在这个示例中: - 表单字段的状态决定了按钮是否被禁用。 - 如果任何字段为空,则按钮会被禁用。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值