从零搭建vue3项目

(一)准备环境到使用vite初始化项目

一.安装node.js环境

node.js中文官网:https://nodejs.org/zh-cn/

1.选择稳定版本下载

2.安装一直next就可以(同意协议,选择安装位置)

。。。

3.校验安装结果

在cmd命令窗口中输入指令查看对应版本

# 查看node版本
$ node -v
# 查看npm版本
$ npm -v
# 安装一个cnpm
$ npm install cnpm -g --registry=https://registry.npm.taobao.org

二、安装vue.js

vue3官网:https://v3.cn.vuejs.org/

1.在页面上以 CDN 包的形式导入

2.下载 JavaScript 文件并自行托管

3.使用 npm 安装它

4.使用官方的 CLI 来构建一个项目

# 全局安装vue-cli
$ cnpm install -g @vue/cli
# 查看版本
$ vue -V

三、使用 vite 构建 vue 项目

1.创建一个文件夹用于存放项目

2.使用指令vite创建vue3项目

# 创建vite项目,选择vue -> 选择vue-ts
$ npm init @vitejs/app myProject
# 进入项目
$ cd myProject
# 安装依赖
$ npm install
# 启动项目
$ npm run dev

到此,一个使用vite创建的vue3项目被成功启动!!!
在这里插入图片描述

(二)安装element plus组件库

element-plus官网:https://element-plus.org/zh-CN/

一、使用npm包管理器安装

# 安装指令
$ npm install element-plus --save

使用cdn引入

<head>
  <!-- Import style -->
  <link rel="stylesheet" href="//unpkg.com/element-plus/dist/index.css" />
  <!-- Import Vue 3 -->
  <script src="//unpkg.com/vue@next"></script>
  <!-- Import component library -->
  <script src="//unpkg.com/element-plus"></script>
</head>

二、全局引用

// main.ts
import { createApp } from 'vue'
import App from './App.vue'

import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'

const app = createApp(App);
app.use(ElementPlus);
app.mount('#app');

三、按需求引用

  1. 先安装unplugin-vue-components 和 unplugin-auto-import这两款插件
$ npm install -D unplugin-vue-components unplugin-auto-import
  1. 再把下列代码插入到你的 Vite 或 Webpack 的配置文件中
//========== vite.config.js ==========
import { defineConfig } from 'vite'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'

export default defineConfig({
  // ...
  plugins: [
    // ...
    AutoImport({
      resolvers: [ElementPlusResolver()],
    }),
    Components({
      resolvers: [ElementPlusResolver()],
    }),
  ],
})

//========== webpack.config.js ==========
const AutoImport = require('unplugin-auto-import/webpack')
const Components = require('unplugin-vue-components/webpack')
const { ElementPlusResolver } = require('unplugin-vue-components/resolvers')

module.exports = {
  // ...
  plugins: [
    AutoImport({
      resolvers: [ElementPlusResolver()],
    }),
    Components({
      resolvers: [ElementPlusResolver()],
    }),
  ],
}

(三)安装配置vue router

安装vue router 4.x

vue router官网:https://next.router.vuejs.org/zh/

一、使用npm包管理器安装

# 安装指令
$ npm install vue-router@4

直接下载或者使用cdn引入

https://unpkg.com/vue-router@4

二、创建一个公共基础配置项文件

// src目录下创建一个router目录router目录下创建一个index.ts

import {createRouter, createWebHistory} from 'vue-router'

//  路由配置
const routes = [
    {
        path: '/',
        redirect: '/home'
    },
    {
        path: '/home',
        name: 'home',
        component: () => import('../views/Home.vue'),
        meta: {
            title: 'Home'
        },
    }
];

// router实例
const router = createRouter({
    history: createWebHistory(),
    routes,
});


// 全局前置守卫
router.beforeEach((to, from, next) => {
    next();
});

// 全局解析守卫
router.beforeResolve(async to => {});

// 全局后置钩子
router.afterEach((to, from, failure) => {
    // if (!failure) sendToAnalytics(to.fullPath)
});

export default router

三、在main.ts中全局使用

// main.ts
import Router from './router/router'

app.use(Router)

四、在合适的地方使用路由

<p>
	<router-link :to="{name:'home'}">To Home</router-link>
</p>
<router-view></router-view>

遇见了一个坑,因为暂时没有用的路由前置守卫,所以直接把里面的内容直接注释了,没有调用next();导致一直没有效果!

五、动态路由

简介:路径参数用冒号 : 表示

const routes = [
  /*
  	当一个路由被匹配时,它的 params 的值将在每个组件中以this.$route.params 的形式暴露出来
  	<div>User {{ $route.params.id }}</div>
  	单个路径参数 example:/user/10086、user/10000
  	{ userId: 'eduardo' }
  */
  { path: '/user/:userId', component: UserDetail.vue },
  
  
  /*
  	多个路径参数,它们会映射到 $route.params 上的相应字段
  	/users/BigBanana/posts/123
  	{ username: 'BigBanana', postId: '123' }
  */
   { path: '/users/:username/posts/:postId', component: User.vue },
]

六、响应参数变化

// 1.watch中监听 $route 对象上的任意属性
const User = {
  template: '...',
  created() {
    this.$watch(
      () => this.$route.params,
      (toParams, previousParams) => {
        // 对路由变化做出响应...
      }
    )
  },
}

// 2.使用 beforeRouteUpdate 导航守卫,它也可以取消导航:
const User = {
  template: '...',
  async beforeRouteUpdate(to, from) {
    // 对路由变化做出响应...
    this.userData = await fetchUser(to.params.id)
  },
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值