从0实战一个 vue3+ ts+element-plus 项目


创建一个vue3+ts+vite项目

1. 文件目录下 npm create vite@latest 并创建名字和技术

在这里插入图片描述
根据提示先 npm install之后运行

2. 安装:npm install -D sass
3. 安装 npm install vue-router@4

之后创建router/index.ts文件
在这里插入图片描述
** 如果报错找不到引入地址就添加tsconfig.json配置

"esModuleInterop": true,
    "baseUrl": ".",
    "paths": {
      "@/*": ["src/*"]
    },
    "allowJs": true,

1. 实现一个自定义变量数据渲染

<template>
  <div class="login">
    {{formLabelAlign.name}}
  </div>
</template>
<script lang="ts" >
import { reactive } from "vue";
export default {
  mane: "login",
  setup() {
    const formLabelAlign = reactive({
      name: "小明",
      region: "",
      type: ""
    });
    return { formLabelAlign };
  }
};
</script>

在这里插入图片描述

2. vue,config.js配置跨域代理

module.exports = {
  devServer: {
    proxy: {
      "/api": {
        "target": '对应的代理地址',//http://22.15.258.222:8888等
        "secure": false,
        "changeOrigin": true,
        "pathRewrite": {
          '^/api': ''
        }
      }
    }
  },
}

3. 添加axios请求

  • 安装依赖 :
npm install --save;
npm install vue-axios --save;
  • 封装axios文件
  1. 新建src/utils/request.js文件(用于新建和配置axios), 新建src/api/user.js文件(作为用户信息相关接口集合文件)
  • 引入并使用封装好的请求,发起一个登录请求:
  1. request.js文件中
import axios from "axios"; //引入
const baseURL = "/api";
const service = axios.create({
  baseURL
});

// 发起请求内容, 这里配置根据实际情况配置
service.interceptors.request.use(config => {
  config.headers['Content-Type'] = 'application/json;charset=utf-8'
  return config
});

// 响应内容, 这里配置根据实际情况配置
service.interceptors.response.use(response => {
  // 请求成功时候
  if (response.status === 200 && response.data) {
    return response.data
  } else {
    return Promise.reject(response.data)
  }
}, error => {// 请求失败时候, 一些逻辑, 根据情况配置
  let code = 0
  try {
    code = error.response.status
  } catch (error) {
    // 网络请求超时
    if (error.toString().indexOf('Error: timeout') !== -1) {
      return Promise.reject(error)
    }
  }
  if (code) {
    if (code === 401) {
      
    } else {
      const errorMsg = error.response.data.errorCode
      if (errorMsg !== undefined) {
      
      } else {
     
      }
    }
  } else {

  } 
  return Promise.reject(error)
});

export default service;

  1. src/api/user.js中
import request from '@/utils/request'
/**
 * @description 登录
 * @param {*} params
 */
 export function adminLogin (data) {//我是简写, 可以根据情况配置其他
     console.log(data)
    return request({
      url: '/admin/login',
      method: 'post',
      data
    })
  }
/**
 * @description 获取首页信息
 * @param {*} params
 */
 export function adminHome (params) {
    return request({
      url: '/user',
      method: 'get',
      params
    })
  }
  • 使用封装好的, 发起一个登录请求:
  1. 引入: import { adminLogin } from “@/api/user.js”;
  2. 发起请求:
<template>
    <div>
        <el-input v-model="name"></el-input>
        <el-input v-model="password"></el-input>
        <el-button type="primary" @click="login">登录</el-button>

    </div>
</template>
<script setup lang="ts" name="mybgType">
import { adminLogin } from '../../api/login'
let name: string = '';
let password: any = '';

const login = () => {
    adminLogin({ name: name, password: password }).then((res: any) => {
        console.log(res)
    })
}
  1. 结果: 请求成功
    在这里插入图片描述
  • 使用时候报错问题1:
无法找到模块“@/api/user.js”的声明文件。“d:/桌面/mq2022/vue3shsili/vue3-typescipt/src/api/user.js”隐式拥有 "any" 类型。ts(7016)

在这里插入图片描述

是因为ts中不能直接识别js文件,两种解决方法

  1. const xx:any = require(‘路径’) ,之后屏蔽警告;
  2. src目录下创建一个声明文件xx.d.ts,内容如下
    在这里插入图片描述
    之后正常使用import引入,就不会又警告了
    在这里插入图片描述
  • 使用时候报错问题2:

(parameter) res: any
(parameter) res: any
参数“res”隐式具有“any”类型。ts(7006)
Parameter ‘res’ implicitly has an ‘any’ type.Vetur(7006)

  • 解决方法then((res)换成then((res: any)就可以了

4. node_modules安装问题

  1. 如果报错npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve npm ERR! npm ERR!问题 是npm 版本问题
    命令后边添加--legacy-peer-deps就可以了

在这里插入图片描述

5. 引入element-plus

请看下一条详解

6. 使用vite创建一个vue3+ts+element-plus项目

新建文件夹之后npm init vite@latest
之后选择一些需要的选项按回车健
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
之后使用上图命令就可以启动了
在这里插入图片描述

之后使用element-plus
  1. 安装
    npm install element-plus --save
  2. 自动引入
    npm install -D unplugin-vue-components unplugin-auto-import
  3. 之后浅试一下; 这里图标类(icon)都要手动引入一下才显示,所以删除按钮时候要手动引入图标
    在这里插入图片描述
    在这里插入图片描述
问题1 这里又红色下划线, 直接删除引入就可

在这里插入图片描述

7. 引入element-plus icon图标

  • 安装 npm install @element-plus/icons-vue
  • 引入

在这里插入图片描述

  • 使用
<el-icon><CloseBold /></el-icon>

8. 添加router

  1. npm install vue-router@4
  2. 创建src/router/index.ts文件
  import { createRouter, createWebHashHistory, createWebHistory, RouteRecordRaw } from 'vue-router'
 
 //views中有新建这些文件
  import login from '../views/login/index.vue' 
  import echart from '../views/echart/index.vue' 
   
  /**
   * 定义路由模块
   */
  const routes: Array<RouteRecordRaw> = [
    {
        path: '/',
        name: 'home',
        meta: {
            title:'首页',
            isShow:true
          },
        component: defineAsyncComponent(() => import('../views/index/index.vue')),
        children: [
            {
              path: 'home',
              meta: {
                title: '首页信息',
              },
              name: 'home',
              component: defineAsyncComponent(() => import('../views/index/index.vue')),
            }
          ]
    },
    {
        path: '/',
        name: 'login',
        meta: {
            title:'登录',
          },
        component: defineAsyncComponent(() => import('../views/login/index.vue'))
    },
  ]
   
  /**
   * 定义返回模块
   */
  const router = createRouter({
    history: createWebHistory('/'),  
    routes
  })
   
  export default router
  1. 再main.ts中引入
import { createApp } from 'vue'
import App from './App.vue'

import router from './router/index'

createApp(App).use(router).mount('#app')

9. 菜单栏使用router

index/index.vue文件
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

10. router控制进入登录页面

  1. App.vue
import router from "./router/index";
//直接跳转
router.beforeEach((to, from, next) => {
  console.log(localStorage.getItem('token'))
    if (localStorage.getItem('token')) {//toekn存在
        if (to.path == '/login') {//token存在,并且是login页面
         next('/home/index');
        } else {//token存在,不是login页面
         next();
        }
       } else {
        if (to.path == '/login') {//token不存在,并且是login页面
         next();
        } else {//token不存在,不是login页面
         next('/login');
        }
       }
})
  1. 关于提取sessionStorage赋值时候类型报错

报错: 类型“string |
null”的参数不能赋给类型“string”的参数。不能将类型“null”分配给类型“string”。ts(2345)

  1. 使用可选链操作符 ?,在访问 sessionStorage 的属性或方法时,先判断其是否为 null,
var sessionStorage: Storage
let myArray: any
const myString: string | null = sessionStorage?.getItem("permission_button");
if (myString !== null) {
  myArray = JSON.parse(myString)
}

11. 页面开发细节

1. 页面结构
<template>
    <div class="ScreenAdapter" :style="style">
    </div>
</template>
<script setup lang="ts" name="transformType">
import { ref, reactive } from "vue";
const style = reactive({
    width: '1600',
    height: '900',
    transform: 'scale(1) translate(-50%, -50%)'
});
const mas = ref(2)
onMounted(() => {
    setScale()
});
onBeforeUnmount(() => {//注销前
});
// 获取放大缩小比例
function getScale() {
}
</script>
<style lang="scss">
</style>
2. ref与reactive区别

在这里插入图片描述

2. vite中使用动态加载图片
  1. 在使用require引用图片路径的时候就报错 require is not defined
  2. vite官网地址https://cn.vitejs.dev/guide/assets.html
   <img :src="getImageUrl(item.meta.icon)" alt="">
   
   function getImageUrl(name: any) {
    return new URL(`../../assets/img/${name}.svg`, import.meta.url).href;
   }

3. 监听路由的两种方式

watch函数和RouteLocationNormalized类型
2. 第一种在这里插入图片描述
3. 第二种
在这里插入图片描述

12. vite.config.ts代理配置

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue()],
  //配置代理,解决跨域问题
  server: {
    proxy: {
      "/api": {
        target: "http://xxxxxxxxx:xxxx",
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/api/, ""),
      },
    },
  },
})

带更新

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
要配置一个使用 TypeScript、Vue 3 和 Element Plus 的 Vue 项目,你可以按照以下步骤进行操作: 1. 首先,确保你已经安装了最新版本的 Vue CLI。如果没有安装,可以运行以下命令进行全局安装: ``` npm install -g @vue/cli ``` 2. 创建一个新的 Vue 项目,使用以下命令: ``` vue create my-project ``` 接下来,你会被要求选择预设配置。选择 "Manually select features"(手动选择特性)并按回车键。 3. 在特性列表中,使用方向键选择 "TypeScript" 并按空格键进行选择。然后按回车键继续。 4. 在下一个屏幕上,使用方向键选择 "Vue 3" 并按空格键进行选择。然后按回车键继续。 5. 在下一个屏幕上,按下方向键将光标移动到 "Babel" 上,并按空格键进行选择。 6. 继续按下方向键将光标移动到 "Linter / Formatter" 上,并按空格键进行选择。 7. 在下一个屏幕上,你可以选择你喜欢的配置文件格式。你可以根据自己的喜好进行选择,然后按回车键继续。 8. 选择 "In dedicated config files"(在独立的配置文件中)并按回车键继续。 9. 这时,Vue CLI 将会安装所需的依赖并创建一个包含 TypeScript 和 Vue 3 的项目。 10. 当安装完成后,进入项目目录: ``` cd my-project ``` 11. 安装 Element Plus 依赖: ``` npm install element-plus ``` 12. 现在,你可以在 Vue 项目中使用 TypeScript 和 Element Plus 来开发了。 希望这能帮助到你开始配置一个 TypeScript、Vue 3 和 Element Plus 的项目

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大白菜1号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值