VUE3的菜单页面设置:保活开关

{
    title: '保活',
    key: 'keepalive',
    width: 40,
    align: 'center',
    render(row) {
      return h(NSwitch, {
        size: 'small',
        rubberBand: false,
        value: row.keepalive,
        onUpdateValue: () => handleUpdateKeepalive(row),
      })
    },
  },

一、代码功能概述

这段代码定义了一个表格列,显示了一个开关(Switch)组件,用于控制菜单项的"保活"状态。当用户切换开关时,会触发 handleUpdateKeepalive 函数,更新对应菜单项的保活状态

二、代码逐行解析

{
  title: '保活',  // 表格列的标题
  key: 'keepalive',  // 对应数据中的字段名
  width: 40,  // 列宽
  align: 'center',  // 内容居中对齐
  render(row) {  // 渲染函数,row 是当前行的数据
    return h(  // Vue3 的 h 函数,用于创建虚拟 DOM 节点
      NSwitch,  // 使用 Naive UI 的 NSwitch 组件
      {  // 组件的属性
        size: 'small',  // 开关大小
        rubberBand: false,  // 禁用橡皮筋效果
        value: row.keepalive,  // 绑定当前行的 keepalive 值
        onUpdateValue: () => handleUpdateKeepalive(row),  // 值更新时的回调
      }
    )
  },
}

三、核心知识点详解

1. Vue3 的 Render 函数与 h 函数

  • h 是 Vue3 的核心函数,用于创建虚拟 DOM 节点

  • 语法:h(组件/标签名, 属性对象, 子节点)

  • 在表格动态渲染场景中非常实用,比模板语法更灵活

讲解技巧: 可以类比为"搭积木",h 函数就是把组件和属性组合起来的工具。比如 h(NSwitch, {size: 'small'}) 就像拿一个小型开关积木。

2. Naive UI 的 NSwitch 组件

  • size: 控制组件大小,可选值有 smallmediumlarge

  • rubberBand: 橡皮筋效果,开启后开关会有弹性动画

  • value: 绑定开关的当前状态(true/false)

  • onUpdateValue: 当开关状态改变时触发的回调

开发技巧

  • 通常配合 v-model 使用,但在这里我们用 valueonUpdateValue 实现了相同的双向绑定效果

  • 如果需要禁用某些开关,可以添加 disabled 属性

3. 表格渲染机制

Naive UI 的表格组件通过 columns 属性接收列配置,每列可以定义:

  • title: 列标题

  • key: 对应数据字段

  • width: 列宽

  • align: 对齐方式

  • render: 自定义渲染函数

注意事项

  • render 函数接收当前行数据作为参数

  • 返回值必须是 Naive UI 的 VNode 或 VNode 数组

四、FastAPI 后端配合

前端需要后端支持才能完成保活状态的持久化。我们通常这样设计:

1. API 接口定义

# 更新菜单保活状态接口
@app.put("/menus/{menu_id}/keepalive")
async def update_menu_keepalive(
    menu_id: int,
    keepalive: bool = Body(..., embed=True)
):
    # 更新数据库逻辑
    await menu_repository.update_keepalive(menu_id, keepalive)
    return {"success": True}

2. 前端调用示例

async function handleUpdateKeepalive(row) {
  try {
    // 切换状态
    row.keepalive = !row.keepalive;
    // 调用后端接口保存
    await api.put(`/menus/${row.id}/keepalive`, {
      keepalive: row.keepalive
    });
    message.success('更新成功');
  } catch (error) {
    // 失败回滚状态
    row.keepalive = !row.keepalive;
    message.error('更新失败');
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值