Vue实时共享编辑文档实现(websocket)

目录

前言

websocket封装

wangeditor下载

共同编辑文档代码实现

HTML样式部分

JS部分

css部分


前言

功能:实现文档共同编辑功能,可以实时接收到其他人的信息 

思路:先调用接口获取相应的数据进行渲染,然后通过webSocket建立链接,实时进行数据的接收和修改。

技术栈:pinia,vue3,websocket,wangeditor

websocket封装

        参考文章:在vue项目中webSocket封装(传token)-CSDN博客

这里就不在做赘述了。

wangeditor下载

        wangeditor是一个富文本容器,在本次共享文档中,我们通过它当输入框(原因:它能够保存输入的格式)

        官网:安装 | wangEditor

本项目中我们只需要进行简单的安装就行

yarn add @wangeditor/editor
# 或者 npm install @wangeditor/editor --save

yarn add @wangeditor/editor-for-vue@next
# 或者 npm install @wangeditor/editor-for-vue@next --save

在安装完成后,一定要在相应的vue文件中引入css样式

<style src="@wangeditor/editor/dist/css/style.css"></style>

 选中文字后会出现样式的更改的功能,如果不喜欢可以直接去上面css源码里把其中的样式更改掉

共同编辑文档代码实现

HTML样式部分

<template>
  <div class="all">
      <el-table :data="tableData" :border="true" style="padding-left: 1px">
        <el-table-column prop="name" width="80">
          <template #="scoped">
            <div style="padding-left: 10px">{{ scoped.row.name }}</div>
          </template>
        </el-table-column>

        <el-table-column
          v-for="(item, index) in loading"
          :key="index"
          width="300"
        >
         <template #="scoped">
            <div v-if="scoped.row.Record[index]">
              <Editor
                v-model="scoped.row.Record[index].content"
                mode="default"
                @onBlur="handleBlur(scoped.row.Record[index])"
              />
            </div>
          </template>
        </el-table-column>
      </el-table>
  </div>
</template>

JS部分

<script setup>

import {
  InterviewRecord,
} from "@/apis/home.js";

import {
  sendWebsocket,
  closeWebsocket,
  websocketSend,
} from "@/utils/websocket.js";

import { ref, onMounted, onBeforeUnmount } from "vue";
import { Editor } from "@wangeditor/editor-for-vue";


// 展示数据
const tableData = ref([]);

// 评论人的数量(渲染几个富文本框)
const loading = ref(0);

//场id
const arrangeId = ref(0);

// 请求数据接口方法
const showData = (id) => {
  InterviewRecord(id).then((res) => {
    localStorage.setItem("arrangeId", res.data.id);
    arrangeId.value = res.data.id;
    tableData.value = res.data.Students;
    loading.value = res.data.Students[0].Record.length;
  });
};

onMounted(() => {
//获取初始数据,进入行页面渲染
  showData(arrangeId);
//链接websocket后面的所有通信全部依靠他来实现
  sendWebsocket(wsMessage, wsError);
});

//富文本框失去焦点
const handleBlur = (e) => {
  // 发起ws数据
  websocketSend(e);
};

// 监听服务器传来的变化
const wsMessage = (data) => {
  const dataJson = data;
  // 这里写拿到数据后的业务代码
  if (tableData.value.length !== 0) {
    console.log(tableData.value);
    tableData.value
      .flatMap((innerArray) => innerArray)
      .forEach((element) => {
        element.Record.forEach((a) => {
          console.log(dataJson.arrange_id, a.arrange_id);
          if (
            dataJson.arrange_id == a.arrange_id &&
            dataJson.content_id == a.content_id &&
            dataJson.student_id == a.student_id
          ) {
            //将后台返回的数据进行,更改
            a.content = dataJson.content;
          }
        });
      });
  }
};

const wsError = () => {
  // 比如取消页面的loading
  console.log("ws连接错误的回调函数");
};

// 页面销毁时关闭ws。因为有可能ws连接接收数据尚未完成,用户就跳转了页面
// 在需要主动关闭ws的地方都可以调用该方法
onBeforeUnmount(() => {
  closeWebsocket();
});
</script>

在 // 监听服务器传来的变化时

因为第一次请求所有数据时,后台返回的数据嵌套的比较深,所有我进行了三层循环,进行定位,用来查找相匹配的数据,进行文本的更改

arrange_id: 207,         场id

student_id: 1,              学生id(行id)

content_id: 0,              列id

content: '<p>看看看看米尔</p>     内容

css部分

//最后别忘了因为富文本框的css

<style src="@wangeditor/editor/dist/css/style.css"></style>

至此所有的功能就都实现了,如果大家有什么不懂的可以在评论区里留言。

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
外卖平台一门开发文档前端GitHub是一个存储和管理前端代码的平台。GitHub以版本控制为核心,提供了一个集中存储、管理、共享和协作的环境,便于开发者进行前端开发工作。 首先,外卖平台的前端开发文档是指开发团队编写的关于前端开发的说明文档,包含了前端开发的流程、规范、技术选型和使用指南等内容。这些文档可以帮助团队成员理解项目需求,协调团队工作,提高开发效率。 其次,GitHub为开发人员提供了版本控制的功能。开发人员可以将前端代码通过Git工具进行提交,每次提交都会生成一个版本。这样,团队成员可以随时查看、比较和恢复之前的代码版本。版本控制功能可以帮助开发者追溯代码变动,方便团队合作和代码管理。 此外,GitHub还提供了许多协作功能,如代码审查、问题跟踪和项目管理等。开发团队可以通过评论、提问和讨论来解决问题,保证代码质量和项目进展。团队成员可以互相审查代码,提出修改意见和建议,确保代码质量和一致性。 对于前端开发来说,GitHub还提供了自动化集成和部署的功能。开发人员可以通过配置持续集成工具,实现代码的自动构建、打包和部署,从而提高开发效率和代码质量。 总之,外卖平台一门开发文档前端GitHub提供了代码存储、版本控制、协作、测试和部署等多种功能,为前端开发团队提供了一个集中管理和协作的平台,帮助开发者更好地进行前端开发工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宝子向前冲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值