Vue3框架项目初始化

创建项目

  • vite 创建项目

    lua 复制代码
    pnpm create vite
  • 下载依赖

    css 复制代码
    pnpm i
  • 启动项目

    复制代码
    pnpm dev

路由配置

  • 下载插件

    css 复制代码
    pnpm install vue-router@4.4.5
  • 创建路由页面

  • 路由映射

    javascript 复制代码
    import { createRouter, createWebHashHistory } from 'vue-router';
    import Home from './pages/home.vue';
    import ArticleDetail from './pages/article-detail.vue';
    
    const routes = [
      { path: '/', redirect: '/home' },
      { path: '/home', component: Home },
      { path: '/article-detail', component: ArticleDetail },
    ];
    
    const router = createRouter({
      history: createWebHashHistory(),
      routes,
    });
    
    export default router;
  • 注册路由

    javascript 复制代码
    import { createApp } from 'vue';
    import './style.css';
    import App from './App.vue';
    // 路由
    import router from './router.js';
    
    const app = createApp(App);
    
    app.use(router).mount('#app');

状态管理Pinia配置

  • 下载插件

    复制代码
    pnpm install pinia pinia-plugin-persistedstate
  • store/user.js

    javascript 复制代码
    import { ref } from 'vue';
    import { defineStore } from 'pinia';
    
    export const userStore = defineStore(
      'user',
      () => {
        const username = ref('');
    
        const changeUsername = (value) => {
          username.value = value;
        };
    
        return { username, changeUsername };
      },
      {
        persist: true, // 数据持久化
      },
    );
  • 配置注册

    javascript 复制代码
    import { createApp } from 'vue';
    import './style.css';
    import App from './App.vue';
    // 路由
    import router from './router.js';
    // Pinia
    import { createPinia } from 'pinia';
    import piniaPluginPersistedstate from 'pinia-plugin-persistedstate';
    
    const app = createApp(App);
    const pinia = createPinia();
    
    // 配置数据持久化
    pinia.use(piniaPluginPersistedstate);
    
    app.use(router).use(pinia).mount('#app');
  • 测试使用

    xml 复制代码
    <script setup>
    import { userStore } from "../store/user";
    
    const user = userStore();
    
    function test() {
      user.setUsername("Steven Wong");
    }
    </script>
    
    <template>
      <div>{{ user.username }}</div>
    </template>

Element Plus配置

  • 下载插件

    bash 复制代码
    pnpm install element-plus @element-plus/icons-vue
    javascript 复制代码
    import { createApp } from 'vue';
    import './style.css';
    import App from './App.vue';
    // 路由
    import router from './router.js';
    // Pinia
    import { createPinia } from 'pinia';
    import piniaPluginPersistedstate from 'pinia-plugin-persistedstate';
    // Element Plus
    import ElementPlus from 'element-plus';
    import 'element-plus/dist/index.css';
    import * as ElementPlusIconsVue from '@element-plus/icons-vue';
    
    const app = createApp(App);
    const pinia = createPinia();
    
    // 配置数据持久化
    pinia.use(piniaPluginPersistedstate);
    
    // 自动引入图标
    Object.keys(ElementPlusIconsVue).forEach((key) => {
      app.component(key, ElementPlusIconsVue[key]);
    });
    
    app.use(router).use(pinia).use(ElementPlus).mount('#app');
  • 测试使用button

bash 复制代码
<el-button type="primary">测试</el-button>
相关推荐
usdoc文档预览1 小时前
USDOC系列之PPT文件在线编辑-VUE前端实现在线浏览器在线编辑PPT文档
前端·vue.js·编辑器·office365·ppt在线编辑·office文件在线编辑·文件在线编辑
Java小卷1 小时前
面向 schema 编程,轻松搞定 Element 虚拟化表格复杂应用场景
vue.js·低代码·element
仨孩子的爹3 小时前
Lodop、hiprint 与 vue-print-designer:打印控件选型对比
vue.js
ruanno_top6 小时前
四个 canvas 组件,在 2 倍屏上一直是糊的
vue.js
ruanno_top6 小时前
一个脏数据能让整条折线消失:图表组件的四种数据契约
vue.js
FlyWIHTSKY1 天前
vue2和vue3有什么区别,用法上有哪些区别
前端·javascript·vue.js
ruanno_top1 天前
能点,但 Tab 不到:两个组件把「可操作」做了一半
vue.js
爱吃烧烤的技术渣1 天前
别再手写 CRUD 了:我把 Element Plus 的工作量压缩成一份列 schema
前端·vue.js
徐小夕1 天前
万字长文!DeepSeek Super-agent × 企业知识库架构深度拆解与落地实践
前端·vue.js·github
ruanno_top2 天前
倒计时该用 deadline 还是每秒减一?我把两种写法都跑了一遍
vue.js