项目:Vue3.2_Vite_TypeScript_Element-Plus

186 阅读3分钟

吾生也有涯,而学也无涯,以有涯随无涯!

创建项目及配置

vite创建vue项目

// 使用 npm 
npm init @vitejs/app
// 使用 yarn 
yarn create @vitejs/app

对vite.config.ts等文件进行配置

路径问题

  1. vite.config.ts中引入path报错解决:安装npm install @types/node -D,同时在tsconfig.node.json文件中配置 "allowSyntheticDefaultImports": true
  2. 用@符号引入路径报错: 在tsconfig.json文件中进行配置
    // 解析非相对模块名的基准目录
    "baseUrl": "./",
    // 模块名到基于 baseUrl的路径映射的列表。
    "paths": {
      "@": ["src"],
      "@/*": ["src/*"]
    }

安装全家桶

配置vue-router

  1. 使用npm安装:npm install vue-router --save
  2. 创建routers文件夹,导出router对象
import { createRouter, createWebHashHistory, RouteRecordRaw } from "vue-router";

/**
 * @RouteRecordRaw  vue-router内置的路由对象类型
 */
const routes: RouteRecordRaw[] = [
	{
		path: "/",
		redirect: { name: "login" }
	},
        {
		path: "/login",
		name: "login",
		component: () => import("@/views/login/index.vue"),
		meta: {
			requiresAuth: false,
			title: "登录页",
			key: "login"
		}
	}
];

/**
 * @createWebHashHistory 通过window.history.state来管理历史记录;
 * @createMemoryHistory 是通过维护一个队列和一个位置来实现对路由记录的管理;
 */
const router = createRouter({
	history: createWebHashHistory(),
	routes,
	strict: false,
	// 切换页面,滚动到最顶部
	scrollBehavior: () => ({ left: 0, top: 0 })
});

export default router;
  1. 在mian.ts的文件引入router对象并挂载到app上
import router from "@/routers/index";

const app = createApp(App);

app.use(router).mount('#app')
  1. 占位:<router-view> </router-view>
  2. 在组件中使用router对象
import { useRoute } from "vue-router";
const route = useRoute();

配置pinia仓库

  1. 安装pinia: npm install pinia@next
  2. src下新建目录store,导出store对象
import { defineStore } from "pinia";
import { GlobalState } from "./interface";  // 规定state中的变量有哪些

// defineStore 调用后返回一个函数,调用该函数获得 Store 实体
export const GlobalStore = defineStore({
	// id: 必须的,在所有 Store 中唯一
	id: "GlobalState",
	// state: 返回对象的函数
	state: (): GlobalState => ({
	
	}),
	getters: {},
	actions: {

	},
	
});
  1. 在main.ts中挂载到app上
  2. 在组件中使用
import { GlobalStore } from "@/store/index";
const globalStore = GlobalStore();

pinia学习

学习文章: # 我把vue3项目中的vuex去除了,改用 pinia

配置element-plus(参考官网)

开发

router

文件的批量引用

vite版本的import.meta.globEager

const metaRouters = import.meta.globEager('./modules/*.ts');

webpack版本的require.context

const files = require.context('.', false, /.ts$/);
const modules = {};
files.keys().forEach((key) => {
     if (key === './index.ts') { return; }
     modules[key.replace(/(./|.ts)/g, '')] = files(key).default;
});
export default modules;

require.context的参数

  1. directory:表示检索的目录
  2. useSubdirectories:表示是否检索子文件夹
  3. regExp:匹配文件的正则表达式,一般是文件名
    例如 require.context("@/views/components",false,/.vue$/)

router切换时顶部的进度条

安装nprogress

npm install --save nprogress

如果是TS项目时,因为nprogress是JS文件所以引入报错

方法1:偷巧

  1. 在tsconfig.json中配置可以引入JS文件
 // 允许引入JS
    "allowJs": true,
  1. 新建一个js文件(我命名为mynprogress.js)
//由于ts 无法直接引入这个 所以先用js引入,然后再用js引入
import nprogress from 'nprogress'
import "nprogress/nprogress.css"
export default nprogress
  1. 在TS文件中引入上面的文件就可以了。

方法2: 声明

  1. 创建plugins.d.ts文件

.d.ts文件:声明文件,来声明这些第三方库的类型,这样在使用第三方库的时候,就有类型了

npm下载的"包"自带了声明文件, 如果我们需要对其类型声明进行扩展就可以使用"declare module"语法.

declare module "nprogress";

axios

vue

ref使用dom

1.在setup中创建变量
const loginFormRef = ref<FormInstance>();

2. 绑定到相应的dom上
<el-form ref="loginFormRef">    </el-form>

3. 在onMounted函数中调用
onMounted(() => {
    console.log(loginFormRef.value);
})

注:因为setup函数代替了vue2的created函数,所以在setup中dom尚未挂载,所以需要在onmounted挂载函数中调用

挂载全局方法

  1. 在main.ts文件中进行全局挂载
import axios from 'axios';
app.config.globalProperties.$http = axios;
  1. 在想使用该方法的组件中引用
import {getCurrentInstance} from "vue";
const {proxy} = getCurrentInstance();
proxy.$http({ })

slot插槽的使用

blog.csdn.net/qq_40063198…

新的标签

transition(Vue 的内置动画标签)

blog.csdn.net/Superman_H/…

keep-alive

www.jb51.net/article/259…

component 动态切换组件

blog.csdn.net/lwc_1234/ar…