iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >教你如何使用VUE组件创建SpreadJS自定义单元格
  • 302
分享到

教你如何使用VUE组件创建SpreadJS自定义单元格

2024-04-02 19:04:59 302人浏览 独家记忆
摘要

Spreadjs纯前端表格控件是基于HTML5的Java电子表格和网格功能控件,适用于.net、Java和移动端等各平台在线编辑类excel功能的表格程序开发。 本文介绍了如何使用V

Spreadjs前端表格控件是基于HTML5的Java电子表格和网格功能控件,适用于.net、Java和移动端等各平台在线编辑类excel功能的表格程序开发

本文介绍了如何使用Vue组件创建SpreadJS自定义单元格功能。

作为近五年都冲在热门框架排行榜首的Vue,大家一定会学到的一部分就是组件的使用。前端开发的模块化,可以让代码逻辑更加简单清晰,项目的扩展性大大加强。对于Vue而言,模块化的体现集中在组件之上,以组件为单位实现模块化。

通常我们使用组件的方式是,在实例化Vue对象之前,通过Vue.component方法来注册全局的组件。


// 告诉Vue,现在需要组件 todo-item,配置如下,包含props和template
Vue.component('todo-item', {
  props: ['todo'],
  template: '<li>{{ todo.text }}</li>'
}) 
// 实例化一个Vue对象,挂载在#app-7元素下,定它的属性,数组groceryList 
var app7 = new Vue({
  el: '#app-7',
  data: {
    groceryList: [
      { text: 'Vegetables' },
      { text: 'Cheese' },
      { text: 'Whatever else humans are supposed to eat' }
    ]
  }
})

在众多组件之中,作为办公必备的电子表格,在前端组件中也占据了重要地位。除了以表格的形式展示数据,电子表格还有一个非常重要的功能,即支持自定义功能拓展和各种定制化的数据展示效果,比如checkbox,Radio button等;还需要实现当单元格进入编辑状态时,使用下拉菜单(或其他输入控件)输入的效果。我们称之为"自定义单元格",一种嵌入组件内的组件。SpreadJS目前拥有8种下拉列表,在打开列表之前,我们只需要在单元格样式中设置选项数据。 你可以参考以下代码使用列表:

在线体验地址


// The way of click the dropdown icon to open list. 
   var style = new GC.Spread.Sheets.Style();
   style.cellButtons = [
       {
           imageType: GC.Spread.Sheets.ButtonImageType.dropdown,
           command: "openList",
           useButtonStyle: true,
       }
   ];
   style.dropDowns = [
       {
           type: GC.Spread.Sheets.DropDownType.list,
           option: {
               items: [
                   {
                       text: 'item1',
                       value: 'item1'
                   },
                   {
                       text: 'item2',
                       value: 'item2'
                   },
                   {
                       text: 'item3',
                       value: 'item3'
                   },
                   {
                       text: 'item4',
                       value: 'item4'
                   }
               ],
           }
       }
   ];
   sheet.setText(2, 1, "Vertical text list");
   sheet.setStyle(3, 1, style);
   // The way open list with command rather then clicking the dropdown button.
   spread.commandManager().execute({cmd:"openList",row:3,col:1,sheetName:"Sheet1"});

前端电子表格固然好用, 但由于框架生命周期以及自定义单元格渲染逻辑的问题,目前的技术手段无法直接在框架页面下直接通过template的方式使用框架下的组件。在之前的内容中,我们提到了可以使用Svelte使用WEB Conmponents封装其他组件可以使用的组件。
除了上面提到的方法之外,我们如果想在Vue环境下使用自定义单元格,可以考虑使用持动态渲染的方式来创建和挂载组件,从而将组件注入自定义单元格。

下面为大家演演示如何在VUE项目中,创建一个使用VUE 组件的自定义单元格。

实践

首先,在项目中开启运行时加载,在vue.config.js中添加runtimeCompiler: true。


module.exports = {
        devServer: {
            port: 3000
        },
        <font color="#ff0000">runtimeCompiler: true</font>
      }

引用ElementUI,需要注意要把element 的CSS引用放在APP import前,这样修改样式,才能覆盖原有项目内容。


import Vue from 'vue'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import App from './App.vue'
import router from './router'
Vue.use(ElementUI);
new Vue({
  el: '#app',
  router,
  render: h => h(App)
})
Vue.config.productionTip = false

创建AutoComplateCellType,具体代码如下,需要注意几点。
1、自定义的元素,需要添加gcUIElement属性,如果元素或者其父元素没有该属性,点击创建的组件便会直接退出编辑状态无法编辑。
对于ElementUI 的autocomplete,默认下拉选项内容是注入到body中的,需要给组件模板中设置:popper-append-to-body="false",让弹出的下拉选项在gcUIElement的Div中渲染。
如果使用其他组件没有类似选项,也可以跟进实际情况在弹出时在添加gcUIElement属性。
2、使用动态挂载组件的 this.vm 设置和获取单元格的值。
3、在deactivateEditor中销毁组件。


import Vue from 'vue'
import * as GC from "@grapecity/spread-sheets"
import DataService from './dataService'
function AutoComplateCellType() {
}
AutoComplateCellType.prototype = new GC.Spread.Sheets.CellTypes.Base();
AutoComplateCellType.prototype.createEditorElement = function (context, cellWrapperElement) {
  cellWrapperElement.style.overflow = 'visible'
  let editorContext = document.createElement("div")
  editorContext.setAttribute("gcUIElement", "gcEditingInput");
  let editor = document.createElement("div");
  // 自定义单元格中editorContext作为容器,需要在创建一个child用于挂载,不能直接挂载到editorContext上
  editorContext.appendChild(editor);
  return editorContext;
}
AutoComplateCellType.prototype.activateEditor = function (editorContext, cellStyle, cellRect, context) {
    let width = cellRect.width > 180 ? cellRect.width : 180;
    if (editorContext) {
        
        // 动态创建VUE 组件并挂载到editor
        const AutoCompleteComponent = {
            props: ['text','cellStyle'],
            template: `<div>
                        <el-autocomplete
                        :style="cellStyle"
                        popper-class="my-autocomplete"
                        v-model="text"
                        :fetch-suggestions="querySearch"
                        placeholder="请输入内容"
                        :popper-append-to-body="false"
                        value-key="name"
                        @select="handleSelect">
                        <i class="el-icon-edit el-input__icon"
                            slot="suffix"
                            @click="handleIconClick">
                        </i>
                        <template slot-scope="{ item }">
                            <div class="name">{{ item.name }}</div>
                            <span class="addr">{{ item.phone }}</span>
                        </template>
                        </el-autocomplete>
                    </div>`,
            mounted() {
                this.items = DataService.getEmployeesData();
            },
            methods: {
                querySearch(queryString, cb) {
                    var items = this.items;
                    var results = queryString ? items.filter(this.createFilter(queryString)) : items;
                    // 无法设置动态内容的位置,可以动态添加gcUIElement
                    // setTimeout(() => {
                    //   let popDiv = document.getElementsByClassName("my-autocomplete")[0];
                    //   if(popDiv){
                    //     popDiv.setAttribute("gcUIElement", "gcEditingInput");
                    //   }
                    // }, 500);
                    // 调用 callback 返回建议列表的数据
                    cb(results);
                },
                createFilter(queryString) {
                    return (restaurant) => {
                    return (restaurant.name.toLowerCase().indexOf(queryString.toLowerCase()) === 0);
                    };
                },
                handleSelect(item) {
                    console.log(item);
                },
                handleIconClick(ev) {
                    console.log(ev);
                }
            }
        };
      // create component constructor
      const AutoCompleteCtor = Vue.extend(AutoCompleteComponent);
      this.vm = new AutoCompleteCtor({
        propsData: {
          cellStyle: {width: width+"px"}
        }
      }).$mount(editorContext.firstChild);
    }
    return editorContext;
};
AutoComplateCellType.prototype.updateEditor = function(editorContext, cellStyle, cellRect) {
    // 给定一个最小编辑区域大小
    let width = cellRect.width > 180 ? cellRect.width : 180;
    let height = cellRect.height > 40 ? cellRect.height : 40;
    return {width: width, height: height};
};
AutoComplateCellType.prototype.getEditorValue = function (editorContext) {
    // 设置组件默认值
    if (this.vm) {
        return this.vm.text;
    }
};
AutoComplateCellType.prototype.setEditorValue = function (editorContext, value) {
    // 获取组件编辑后的值
    if (editorContext) {
      this.vm.text = value;
    }
};
AutoComplateCellType.prototype.deactivateEditor = function (editorContext, context) {
    // 销毁组件
    this.vm.$destroy();
    this.vm = undefined;
};
export {AutoComplateCellType};

效果如图:

一个完美的单元格新鲜出炉~

这里介绍的方式只是诸多实现方案的一种。如果大家有其他更好的想法方法,欢迎一起讨论 ~

如果你对其他更多前端电子表格中有趣功能感兴趣,可以查看 SpreadJS更多实例演示。

到此这篇关于教你如何使用VUE组件创建SpreadJS自定义单元格的文章就介绍到这了,更多相关vue SpreadJS自定义单元格内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 教你如何使用VUE组件创建SpreadJS自定义单元格

本文链接: https://www.lsjlt.com/news/161865.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 教你如何使用VUE组件创建SpreadJS自定义单元格
    SpreadJS纯前端表格控件是基于HTML5的Java电子表格和网格功能控件,适用于.NET、Java和移动端等各平台在线编辑类Excel功能的表格程序开发。 本文介绍了如何使用V...
    99+
    2024-04-02
  • Vue 开发工具:如何创建和使用自定义组件?
    ...
    99+
    2024-04-02
  • vue使用脚手架vue-cli创建并引入自定义组件
    一、创建并引入一个组件 1、创建组件 vue-cli中的所有组件都是存放在components文件夹下面的,所以在components文件夹下面创建一个名为First.vue的自定义...
    99+
    2024-04-02
  • vue如何用directives自定义组件
    这篇“vue如何用directives自定义组件”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue如何用directive...
    99+
    2023-07-04
  • vue怎么使用脚手架vue-cli创建并引入自定义组件
    小编给大家分享一下vue怎么使用脚手架vue-cli创建并引入自定义组件,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、创建并引入一个组件1、创建组件vue-cli中的所有组件都是存放在components文件夹下面的,...
    99+
    2023-06-29
  • 如何在Vue CLI中使用自定义组件
    在Vue.js框架下,使用自定义组件能够大大提高项目的开发效率。Vue CLI是一个基于Vue.js快速搭建项目的脚手架工具,Vue CLI的快速开发流程便于开发人员更快速地搭建项目。本篇文章将介绍如何在Vue CLI中使用自定义组件。一、...
    99+
    2023-05-14
  • Vue组件如何创建使用
    这篇文章主要介绍“Vue组件如何创建使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue组件如何创建使用”文章能帮助大家解决问题。一、组件组件是vue的重要的特征之一,可以扩展html的功能,也...
    99+
    2023-07-05
  • 如何生成vue自定义组件和嵌套表单组件
    本篇内容介绍了“如何生成vue自定义组件和嵌套表单组件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!使用form-create动态生成vue...
    99+
    2023-07-04
  • 微信小程序中如何自定义创建和使用组件
    在微信小程序中,可以通过使用自定义组件来实现对页面上重复使用的部分进行封装和复用。下面是在微信小程序中自定义创建和使用组件的步骤: ...
    99+
    2024-04-09
    微信小程序
  • vue自定义组件如何添加使用原生事件
    目录自定义组件如何添加使用原生事件. $emit()传递. native属性vue使用原生事件自定义组件如何添加使用原生事件 自定义组件(Components)是vue的重要知识块之...
    99+
    2024-04-02
  • 如何使用form-create动态生成vue自定义组件和嵌套表单组件
    这篇文章主要介绍了如何使用form-create动态生成vue自定义组件和嵌套表单组件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。使用fo...
    99+
    2024-04-02
  • 如何使用Dockerfile创建自定义镜像
    要使用Dockerfile创建自定义镜像,请按照以下步骤: 创建一个新的文件夹,并在文件夹中创建一个名为Dockerfile的文...
    99+
    2024-04-02
  • antd vue中,如何在form表单中的自定义组件使用v-decorator
    目录antd vue中在form表单中的自定义组件使用v-decorator问题描述分析简单说明v-decorator antd vue的理解总结antd vue中在form表单中的...
    99+
    2023-05-17
    antd vue form表单自定义组件 自定义组件v-decorator
  • 如何使用vue组件自定义v-model实现一个Tab组件
    这篇文章主要介绍如何使用vue组件自定义v-model实现一个Tab组件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!效果先让我们看一下例子的效果吧!v-model我们知道 v-mo...
    99+
    2024-04-02
  • 如何使用 PHP 创建自定义函数库?
    在 php 中创建自定义函数库的步骤为:创建函数文件,例如 myfunctions.php,并在其中定义函数。使用 require 或 include 语句将函数库文件包含到 php 脚...
    99+
    2024-04-10
    php 自定义函数库
  • 如何使用vue封装一个自定义日历组件
    本文小编为大家详细介绍“如何使用vue封装一个自定义日历组件”,内容详细,步骤清晰,细节处理妥当,希望这篇“如何使用vue封装一个自定义日历组件”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。核心代码实现1、梳理思...
    99+
    2023-07-05
  • 如何使用vue自定义指令构建拖放插件
    我们都知道html5的拖放特性,利用它可以很方便的实现拖拽和放置功能,比如一些选择类操作的使用场景,让用户去拖拽比鼠标点击更容易接受和理解。今天我们就利用这一特性,结合vue的自定义...
    99+
    2024-04-02
  • C++ 函数如何帮助开发者创建自定义 GUI 组件?
    c++++ 函数可用于创建自定义 gui 组件。通过定义函数、处理 gui 任务并从主应用程序调用函数,开发人员可以创建自定义组件。优点包括可复用性、代码清晰度和可扩展性。实战案例展示了...
    99+
    2024-04-25
    c++
  • 使用vue自定义如何实现Tree组件和拖拽功能
    目录vue自定义实现Tree组件和拖拽功能vue2 + js版vue2 + ts 版总结vue自定义实现Tree组件和拖拽功能 实现功能:树结构、右键菜单、拖拽 效果图 vue2 ...
    99+
    2022-12-09
    vue自定义Tree组件 vue Tree组件 vue拖拽功能
  • 使用PyCharm,逐步教你如何自定义背景颜色
    手把手教你在PyCharm中改变背景颜色,需要具体代码示例 一、背景颜色的重要性 对于软件开发者来说,一个舒适的开发环境是非常重要的。PyCharm作为一款强大的Python开发工具,在开发过程中提供了许多个性化的配置选项,其中...
    99+
    2024-02-03
    python pycharm 背景颜色设置
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作