• vue.extend 实现表格,同时编辑多条数据


    Ⅰ. vue.extend 使用场景

    • 需要 频繁 多个类型 vue组件中 导入组件,而且存在 频繁切换;
    • (如果 v-if  和 v-else ,需要到每个向里面去添加 ,不太好 )
    • 调用 方法就去页面中 ,添加一条   Message 提示  的vue组件 ,而且点击多次会多次弹出。

    这时 :vue.extend 就有了合理的出场机会。

    • 效果如下:

    •  需要创建 四个文件,举例如下 :

        inputBox  =>  双击后出现的输入框组件;

        textBox   =>   双击已是输入框的,或点保存,还原的文本组件;

        changeBox => 是将 上面两个组件导入 ,继承并暴露出去;

        tableBox =>  通过new  changeBox 暴露的继承组件 ,实现功能。


    Ⅱ. 通过 vue.extend 实现表格的任意编辑多条数据

    •  首先创建一个输入框,和一个文本框组件,便于后面的继承。 

    输入框如下  inputBox.vue

    1. <template>
    2. <input class="inputBox" v-model="value" />
    3. template>
    4. <script>
    5. export default {
    6. props: {
    7. value: String || Number,
    8. }
    9. }
    10. script>

    文本框如下 textBox.vue

    1. <template>
    2. <div class="cell">{{ value }} div>
    3. template>
    4. <script>
    5. export default {
    6. props: {
    7. value: String || Number,
    8. },
    9. };
    10. script>

    •  创建一个 中间 Js 文件, 用于继承,上面 2 个输入框组件

       中间层  changeBox.js  

    1. import Vue from "vue";
    2. import inputBox from "./inputBox.vue";
    3. import textBox from "./textBox.vue";
    4. const inputItem = Vue.extend(inputBox);
    5. const textItem = Vue.extend(textBox);
    6. export default {
    7. inputItem,
    8. textItem,
    9. }

    去使用extend  继承组件

    采用 element - ui 的表格 ,方便双击 ,找到对应的 dom 【不用自己手写】

    1. 通过 new  继承组件  , 然后通过 $mount  , 去挂载指定的位置 ;
    2. 写成 2 个方法  changeInput 【切换输入框】changeText 【切换文本】
    3. 通过双击 判断 对应节点的   className  来 实现    输入框 ↔ 文本    来回切换
    4. keepAll 方法 ,用于将所有没有切换的 输入框  转换成文本 , 主要通过遍历dom【注意 :这里的dom数组是伪数组,转换成真数组才能用数组的方法】来修改虚拟dom 
    5. 通过遍历,重复调用 changeText  ,来实现全部保存成文本 ;

      table.vue最后表格组件代码整合:

    1. <template>
    2. <div class="pageBox">
    3. <el-table
    4. :data="tableData"
    5. size="mini"
    6. class="tableBox"
    7. @cell-dblclick="dblclick"
    8. >
    9. <el-table-column
    10. v-for="item in columns"
    11. :key="item.prop"
    12. :prop="item.prop"
    13. :label="item.label"
    14. />
    15. el-table>
    16. <el-button @click="keepAll">保存el-button>
    17. div>
    18. template>
    19. <script>
    20. import changeBox from "./changeBox";
    21. export default {
    22. data() {
    23. return {
    24. columns: [
    25. { prop: "name", label: "姓名" },
    26. { prop: "height", label: "身高" },
    27. ],
    28. tableData: [
    29. { name: "张三", height: "180cm" },
    30. { name: "李四", height: "185cm" },
    31. ],
    32. };
    33. },
    34. methods: {
    35. dblclick(row, column, cell) {
    36. let to = cell.children[0];
    37. if (to.className.includes("inputBox")) {
    38. this.changeText(to.value, to);
    39. } else {
    40. this.changeInput(cell.innerText, to);
    41. }
    42. },
    43. changeInput(value, to) {
    44. new changeBox.inputItem({ propsData: { value: value } }).$mount(to);
    45. },
    46. changeText(value, to) {
    47. new changeBox.textItem({ propsData: { value: value } }).$mount(to);
    48. },
    49. keepAll() {
    50. //遍历dom ,修改虚拟dom
    51. let inputList = document.getElementsByClassName("inputBox");
    52. [...inputList].forEach((item) => {
    53. let text = item.value;
    54. this.changeText(text, item);
    55. });
    56. },
    57. },
    58. };
    59. script>

     

  • 相关阅读:
    ArkTS声明式开发范式
    G1D14fraud&git&pipenv&df操作&APT论文&RCE37-40&服务器搭建
    面试题------线程池的拒绝策略
    R语言ggplot2可视化:使用ggpubr包的geom_exec函数执行geom_*函数(没有任何参数需要放置在aes中)
    RobotFramework入门(一)简要介绍及使用
    通用ORM的设计与实现
    干货 | 人力资源数字化的优势和应用场景展示
    打开google search,从taskbar拖拽全屏应用比如Google进入分屏,页面出现Launcher报错
    JBDC的使用
    57.【全排列的详细分析】
  • 原文地址:https://blog.csdn.net/weixin_42232622/article/details/126266672