纯前端实现简历模板热插拔实时切换更新的解决方案与思路

admin 2025-04-20 247 0

[id_467544084]id_1265953395]

近期在做一个纯前端的简历项目,遇到一个问题难点。

背景:

纯前端(无后端),页面左侧为简历编辑区域,右侧可实时切换简历模板。左侧编辑完成后,右侧的简历预览能实时随数据更改而更新数据。其中最重要的是简历模板可热插拔且能实时切换更新,这是纯前端的实现方案。

整体流程的实现思路是获取简历模板列表,用户可以选择简历模板,然后将其存入 pinia(需使用 pinia-plugin-persistedstate 插件来实现持久化)。在简历预览页面中,通过组件形式导入简历。预览页面需要监听用户切换模板的操作,以便实时热更新简历模板(切换组件)。

首先在 public/template.json 里对模板列表进行定义。

为什么要放在 public 文件夹呢?因为 public 文件夹不会被 vite 进行打包压缩。并且在打包状态或者开发状态运行时,都能够直接通过 /template.json 来访问到对应的 json 文件,从而获取到模板。

[
  {
    "id": "template111111",
    "name": "简洁模板1",
简约的同时又不简单的是简历模板。
    "folderPath": "templateA",
    "thumbnail": "preview.jpg"
  },
  {
    "id": "template222222",
    "name": "简洁模板2",
    "description": "简约而不简单的简历模板。",
    "folderPath": "templateB",
    "thumbnail": "preview.jpg"
  },
  {
    "id": "template33333",
    "name": "开发版本",
供开发者参考的是用于开发的模板。
    "folderPath": "templateC",
    "thumbnail": "preview.jpg"
  }
]

获取简历模板列表的工具类

从“../types/template”这个路径中导入名为“Template”的类型。
export 函数 getTemplates 是一个异步函数,它返回一个 Promise 类型的值。 => {
  try {
await fetch('/templates.json');  // 使用绝对路径
    if (!response.ok) {
      throw new Error('无法获取模板列表');
    }
    return await response.json();
  } catch (error) {
在控制台输出错误信息,内容为“获取模板列表失败:”以及具体的错误信息 error 。
    return [];
  }
};

使用 pinia 来进行持久化存储,以保存用户切换模板的数据。如此一来,当用户下次在浏览器中进入时,所看到的依然是之前选择的模板。

这里使用下面这个插件,开启pinia数据自动持久化

使用 npm 来安装 pinia-plugin-persistedstate 。

在 useTemplateStore.ts 里设置了用户所选择的主题模板,并且还有主题色,不过主题色不在本文章中进行介绍。

开启 pinia 数据自动持久化,persist 为 true 。这样就无需自己另外去写 localStorage 的更新插入等操作,非常方便。

使用“pinia”库的“defineStore”函数进行相关操作。
import { ref } from 'vue'
从“../types/template”这个路径中导入名为“Template”的类型。
定义了一个名为 useTemplateStore 的函数,它使用 defineStore 函数创建了一个名为 'templateStore' 的存储。
  const currentTemplate = ref