vue-前端读取文件夹并高亮代码

为什么写

        来自抖音博主演示,vscode可以在网页端选择文件夹,觉得很新颖的功能。

目的

        学会使用对应的API

完整代码

github 获取问价夹内容-vue3

1.读取文件 showDirectoryPicker

async function pickDirectory() {
  try {
    const directoryHandle = await window.showDirectoryPicker({
			id: 'test',
			mode: 'readwrite',
			startIn: 'documents',
		});

    // Construct and display the directory tree
    const tree = await buildTree(directoryHandle);
    nodes.value = [tree];
  } catch (err) {
    console.error("Error picking directory:", err);
  }
}

async function buildTree(directoryHandle) {
  const tree = {
    key: guid(),
    label: directoryHandle.name,
    type: "directory",
    children: [],
  };

  const dirEntries = await directoryHandle.values();
  for await (const entry of dirEntries) {
    console.log("🚀 ~ file: index.vue:98 ~ forawait ~ entry:", entry)
    entry.isDirectory = entry.kind === "directory";
    if (entry.isDirectory) {
      const subtree = await buildTree(entry);
      tree.children.push(subtree);
    } else {
			tree.children.push({ key: guid(), label: entry.name, type: "file", data: entry });
    }
  }
  return tree;
}

注意点

        1.读取属于iO操作,所以异步

        2.文件夹属于树结构

2.高亮代码

        使用【simple-syntax-highlighter】库

<template>
  <ssh-pre
    :label="options.label"
    :language="options.language"
    :dark="options.dark"
    :editable="options.editable"
    :tab="options.tab"
    :copy-button="options.copyButton"
    @copied="onCopiedDoSomething"
  >
    {{ code }}
  </ssh-pre>
</template>

<script setup lang="ts">
import SshPre from "simple-syntax-highlighter";
import "simple-syntax-highlighter/dist/sshpre.css";
import { ref, reactive, watch } from "vue";
import Toast from "primevue/toast";
import { useToast } from "primevue/usetoast";
const toast = useToast();

const options = reactive({
  language: "js",
  label: "Javascript",
  dark: true,
  copyButton: true,
  editable: true,
  tab: " ",
});

const props = defineProps({
  code:  ""
});

const onCopiedDoSomething = () => {
  console.log("copied");
  toast.add({
    severity: "success",
    summary: "",
    detail: "Copy success",
    life: 3000,
  });
};
</script>

<style lang="css" scoped></style>

       

3.总结

获取到文件,使用store存起来,使用高亮的js库展示

github链接

​​​​​​​GitHub - Raywh/vue-directory: open directory for edit by browser

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
插件实现Java代码高亮显示,可以按照以下步骤进行操作: 以下是一个Vue组件的示例,其中包含一个1. 安装vue-codemirror插件和codemirror插件: ```shell npm install vue-codemirror --save npm install codCodemirror编辑器和一个按钮,点击按钮将编辑器中的内容emirror --save ```发送到后端进行处理: ```html <template> <div> <codemirror ref="codeMirrorEditor" :value="code 2. 在main.js中引入vue-codemirror插件和codemirror插件: ```javascript import" : Vue fromoptions="{ theme: 'vue' import VueCodeMirror from ' 'base16vue-codem-dark' }irror' import" @changes 'codem="onChange"></irror/lib/ccodemirrorodemirror.css> <' import 'button @clickcodemirror="sendData/mode/cl">发送数据ike/clike</button> .js' Vue </div.use(Vue> </templateCodeMirror) ```> <script> import axios from 'axios' import 'codemirror/lib/codemirror.css' import 'codem 3. 在需要使用vue-codemirror的组件中,使用vue-codemirror标签,并设置mode属性为clirror/theme/base16-dark.css' import VueCodemirrorike,即可实现Java代码高亮显示: ```html from< 'vuetemplate> -codemirror' export default <div> { components <vue: { -codemirror codemirror v-model=": VueCodcode" :emirror.codoptions="cmemirror Options" mode }, ="clike data() { "></vue-codemirror> return { </div code:> </template '' } > <script> }, export default { methods: { data() { return onChange() { code { this: '', .code = this cmOptions:.$refs.code { tabMirrorEditor.getCodeSize: 4, () }, styleActiveLine sendData() { axios: true, .post('/api lineNumbers/data', {: true, line: data: this true, .code }) theme: ' .then(responseidea' => { } } console.log(response.data) }) .catch(error => { } } </script>

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值