【最佳实践】el-admin多表CRUD最佳实践,不允许你只会搞单表CRUD了(源码错了,顺带升级了)

news2024/11/17 21:17:52

【最佳实践】el-admin多表CRUD最佳实践,不允许你只会搞单表CRUD了,(源码错了,顺带升级了)

  • 一、el-admin前端通用核心组件
  • 二、如何使用?
    • 2.1 新建组件
    • 2.2 修改对象属性标记
    • 2.3 修改四类组件引用标记
    • 2.4 生效
  • 三、结果
  • 四、改进
    • 4.1 源码解读
    • 4.2 源码错误
    • 4.3 源码升级

一、el-admin前端通用核心组件

在这里插入图片描述
由原来的一个文件拆解为现在的5个文件,组件实现进一步精细化管理,通用且不失灵活。如果对这5个文件还不熟悉,可以看笔者的这一篇博客:【庖丁解牛】vue-element-admin前端CRUD通用操作组件详解,对,核心就是crud.js文件。

关于如何进行多表CRUD,虽然官在crud.js有说明,但是很多初学者还不会使用,这篇博客能够呈现快速使用多表CRUD最佳实践。

二、如何使用?

2.1 新建组件

export default {
  name: 'ManyCRUDNew',
}

2.2 修改对象属性标记

添加tag标记

 cruds() {
    return CRUD({ tag: 'many-crud-new', title: '---', url: '---', idField: 'id', sort: 'id,desc', crudMethod: { ...--- }})
  },

2.3 修改四类组件引用标记

对搜索组件、工具组件、分页组件、操作组件分别添加crud-tag标记。

<!--搜索栏组件-->
<crudOperation crud-tag="many-crud-new" :permission="permission">   
</crudOperation>
<!--工具类组件-->
 <el-col :span="7">
   <rrOperation crud-tag="many-crud-new" :crud="crud" />
</el-col>
<!--分页组件-->
<pagination crud-tag="many-crud-new" />
<!--操作类组件-->
<udOperation
  crud-tag="many-crud-new"
  :permission="permission"
/>

2.4 生效

在需要多表CRUD组件中引用,在引用组件上添加crud-tag属性标记即可生效。

<many-crud-new crud-tag="many-crud-new"></many-crud-new>

三、结果

点击单条记录的编辑按钮,弹出编辑状态的对话框,上半部分显示本条记录的属性信息,下半部分显示另一个实体CRUD的列表。
在这里插入图片描述

四、改进

4.1 源码解读

/**
 * 递归查找crud
 * @param {*} vm
 * @param {string} tag
 */
function lookupCrud(vm, tag) {
  tag = tag || vm.$attrs['crud-tag'] || 'default'
  // function lookupCrud(vm, tag) {
  if (vm.$crud) {
    const ret = vm.$crud[tag]
    if (ret) {
      return ret
    }
  }
  return vm.$parent ? lookupCrud(vm.$parent, tag) : undefined
}

从源码中可以读取到查CRUD组件的方法就是查找crud-tag属性,这个是关键。

原理就是利用Vue组件透传属性函数$attrs获取属性,一般在高阶组件中使用,即高级封装。

4.2 源码错误

function presenter(crud)函数beforeCreate中,

beforeCreate() {
      this.$crud = this.$crud || {}

      let cruds = this.$options.cruds instanceof Function ? this.$options.cruds() : crud

      //TODO: 为什么转成数组进行判断

      if (!(cruds instanceof Array)) {
        cruds = [cruds]
      }
      cruds.forEach(ele => {
        if (this.$crud[ele.tag]) {
          console.error('[CRUD error]: ' + 'crud with tag [' + ele.tag + ' is already exist')
        }
        this.$crud[ele.tag] = ele
        ele.registerVM('presenter', this, 0)
      })

      this.crud = this.$crud['default'] || cruds[0] //default英文写错了,导致要进行数组的转换

    }

4.3 源码升级

在实践过程发现太多地方要进行标记,用户使用之不方便。

其实2.2章节中组件对象tag标记是多余的,通过修改源码可以只需要进行属性标记即可。

按以下代码修改后,直接通过属性可以获取到crud的标记,避免在对象属性的tag中进行标记,仅在组件中进行标记即可。

beforeCreate() {

      this.$crud = this.$crud || {}

      let cruds = this.$options.cruds instanceof Function ? this.$options.cruds() : crud

      cruds.registerVM('presenter', this, 0)

      let tag = this.$attrs['crud-tag'] ? this.$attrs['crud-tag'] : 'default'

      this.$crud[tag] = cruds

      this.crud = this.$crud[tag]

    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1435506.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HarmonyOS鸿蒙ArkTS证件照生成模板(适合二次开发,全套源码版)

预览效果 部分代码 开发语言 HarmonyOS 鸿蒙 ArkTS语言 &#xff08;Stage模型&#xff09; 备注 一键生成&#xff0c;自带证件照数集&#xff0c; 为开发者带来二次开发和学习体验&#xff0c; 在这祝福开发者们使用愉快。 使用方法 下载后通过DevEco Studio开发工…

HarmonyOS开发工具DevEco Studio安装以及汉化

HUAWEI DevEco Studio 面向HarmonyOS应用及元服务开发者提供的集成开发环境(IDE)&#xff0c; 助力高效开发。 应用内共享HSP开发 支持在Stage模型和模块化编译方式下开发HSP&#xff0c;以及共享HSP给应用内其他模块使用;支持运行态共享HSP。Code Linter代码检查 支持ArkTS/T…

多模态论文串讲·上【论文精读·46】

大家好&#xff0c;今天我们就来过一下多模态的串讲&#xff0c;其实之前我们也讲了很多工作了&#xff0c;比如说clip&#xff0c;还有 ViLT 以及 clip 的那么多后续工作。多模态学习在最近几年真的是异常的火爆&#xff0c;那除了普通的这种多模态学习&#xff0c;比如说视觉…

【大数据】Flink 中的 Slot、Task、Subtask、并行度

Flink 中的 Slot、Task、Subtask、并行度 1.并行度2.Task 与线程3.算子链与 slot 共享资源组4.Task slots 与系统资源5.总结 我们在使用 Flink 时&#xff0c;经常会听到 task&#xff0c;slot&#xff0c;线程 以及 并行度 这几个概念&#xff0c;对于初学者来说&#xff0c;这…

爬虫工作量由小到大的思维转变---<第四十四章 Scrapyd 用gerapy管理多台机器爬虫>

前言: 之前讲过关于如何在gerapy中部署本地爬虫, 爬虫工作量由小到大的思维转变---&#xff1c;第三十四章 Scrapy 的部署scrapydGerapy&#xff1e;_gerapy如何登录-CSDN博客 爬虫工作量由小到大的思维转变---&#xff1c;第三十五章 Scrapy 的scrapydGerapy 部署爬虫项目&…

锦上添花!特征选择+深度学习:mRMR-CNN-BiGRU-Attention故障识别模型!特征按重要性排序!最大相关最小冗余!

适用平台&#xff1a;Matlab2023版及以上 特征选择方法&#xff1a;"最大相关最小冗余"&#xff08;Maximal Relevance and Minimal Redundancy&#xff0c;简称MRMR&#xff09;是一种用于特征选择的方法。该方法旨在找到最相关的特征集&#xff0c;同时最小化特征…

[UI5 常用控件] 06.Splitter,ResponsiveSplitter

文章目录 前言1. Splitter1.1 属性 2. ResponsiveSplitter 前言 本章节记录常用控件Splitter,ResponsiveSplitter。主要功能是分割画面布局。 其路径分别是&#xff1a; sap.ui.layout.Splittersap.ui.layout.ResponsiveSplitter 1. Splitter 1.1 属性 orientation &#x…

Meta开源大模型LLaMA2的部署使用

LLaMA2的部署使用 LLaMA2申请下载下载模型启动运行Llama2模型文本补全任务实现聊天任务LLaMA2编程Web UI操作 LLaMA2 申请下载 访问meta ai申请模型下载&#xff0c;注意有地区限制&#xff0c;建议选其他国家 申请后会收到邮件&#xff0c;内含一个下载URL地址&#xff0c;…

【python】绘制爱心图案

以下是一个简单的Python代码示例&#xff0c;它使用turtle模块绘制一个代表爱和情人节的心形图案。 首先&#xff0c;请确保计算机上安装了Python和turtle模块。然后&#xff0c;将以下代码保存到一个.py文件中&#xff0c;运行它就可以看到爱心图案的绘制过程。 import turt…

【ArcGIS微课1000例】0101:删除冗余节点或折点

文章目录 一、实验描述二、实验数据三、实验过程1. 手动删除2. 简化线工具四、注意事项一、实验描述 矢量数据获取通常来源于手动或者ArcScan自动采集,其基本存储方式就是记录每个要素的点坐标,如点要素就是一个坐标、线要素由多个点要素连接形成。当某段线要素被过多的节点…

【webpack】优化提升

webpack优化提升 安装webpack相关内容向下兼容游览器-babel/polyfill进一步优化babel/polyfill模块联邦-共享模块如何提升构建性能通用环境下1&#xff0c;webpack更新到最新版本2&#xff0c;将loader应用于最少数量的必要模块3&#xff0c;引导&#xff08;每个额外的loader/…

pr如何导出mp4格式视频?手把手教你

PR是一款强大的视频编辑软件&#xff0c;广泛应用于电影、电视制作以及各类创意视频项目。在完成编辑后&#xff0c;将项目导出为MP4格式视频是常见的需求&#xff0c;因为MP4是一种通用且高度兼容的视频格式&#xff0c;适用于多个平台和设备。pr如何导出mp4格式视频&#xff…

分享69个节日PPT,总有一款适合您

分享69个节日PPT&#xff0c;总有一款适合您 69个节日PPT下载链接&#xff1a;https://pan.baidu.com/s/1Y3tf2bStj595B2GD3v0dBQ?pwd8888 提取码&#xff1a;8888 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不易。…

记录一下esp32模组固件开发流程

现在的esp32开发环境非常简单&#xff0c;参考如下&#xff1a; dl.espressif.cn/dl/esp-idf/ 在上面的链接中选择合适的版本进行安装&#xff0c;安装后环境自带源文件、编译连接工程脚本、图形化配置脚本、编译器、烧录调试工具。 这里我选择安装在C盘&#xff0c;C:\Espr…

Redis核心技术与实战【学习笔记】 - 17.Redis 缓存异常:缓存雪崩、击穿、穿透

概述 Redis 的缓存异常问题&#xff0c;除了数据不一致问题外&#xff0c;还会面临其他三个问题&#xff0c;分别是缓存雪崩、缓存击穿、缓存穿透。这三个问题&#xff0c;一旦发生&#xff0c;会导致大量的请求积压到数据库。若并发量很大&#xff0c;就会导致数据库宕机或故…

网络安全大赛

网络安全大赛 网络安全大赛的类型有很多&#xff0c;比赛类型也参差不齐&#xff0c;这里以国内的CTF网络安全大赛里面著名的的XCTF和强国杯来介绍&#xff0c;国外的话用DenCon CTF和Pwn2Own来举例 CTF CTF起源于1996年DEFCON全球黑客大会&#xff0c;以代替之前黑客们通过互相…

GUI编程..

1.GUI(Graphical User Interface 图形用户界面) 所谓GUI 指的是在计算机中采用图形方式展示用户的界面 在GUI之前采用的是字符界面 有了GUI之后 采用的则是图形界面 2.Java的GUI编程方案 常见的有四种 3.Swing 1.实现一个窗口 public class Main{public static void ma…

第二证券:北向资金连续第五日净流入,茅台、工行、五粮液等获加仓

沪指低收险守2700点关口&#xff0c;北向资金接连5日净流入。 2月5日&#xff0c;A股三大股指团体低开&#xff0c;三大股指均创阶段性新低后反弹&#xff0c;创业板指午后首先翻红且一度涨超3%&#xff0c;深成指和沪指也相继转涨。但商场做多情绪欠安&#xff0c;沪深股指重…

K8S之Namespace的介绍和使用

Namespace的理论和实操 Namespace理论说明Namespace实操创建、查看命名空间使用ResouceQuota 对Namespace做资源限额更多ResouceQuota 的使用 Namespace理论说明 命名空间定义 K8s支持多个虚拟集群&#xff0c;它们底层依赖于同一个物理集群。 这些虚拟集群被称为命名空间&…

深入理解Netty及核心组件使用—下

目录 ChannelHandler ChannelHandler 接口 ChannelInboundHandler 接口 ChannelHandler 的适配器 Handler 的共享和并发安全性 资源管理和 SimpleChannelInboundHandler Bootstrap ChannelInitializer ChannelOption ChannelHandler ChannelHandler 接口 从开发人员的…