1. 导语

本文是主要记录的是我在使用Vue 3.x+ Element-plus开发时遇到的各种问题,会持续更新。

2. 导入Axios

2.1. 下载插件

按下图中的顺序安装Axios。

elementplus适配1440 element- plus_vue.js

2.2. 在main.js进行如下操作

import axios from 'axios'
// 创建 Axios 实例
const http = axios.create({
    baseURL: 'http://localhost:8888/' 
    // 这里也可以配超时的相关信息
});

// axiox请求拦截
http.interceptors.request.use(config => {
    // 为请求头对象,添加token验证Authorization字段
    config.headers.Authorization = window.sessionStorage.getItem('token') 
    return config;
},error => {
    // Do something with request error
    return Promise.reject(error);
});
const app = createApp(App)
app.config.globalProperties.$http = http // 使用$http做为axios的具体访问名称
app.mount('#app')

2.3. 使用

这个不在main.js中使用啊,这个在你具体的业务组件中的js代码里使用啊!

// 登录操作
login () {
  // 表单预验证
  // valid:bool类型
  this.$refs.loginFormRef.validate(async valid => {
    if (!valid) return false
    // this.$http.post('login', this.loginForm): 返回值为promise
    // 返回值为promise,可加await简化操作 相应的也要加async
    const { data: res } = await this.$http.post('login', 'username='+this.loginForm.username+'&password='+this.loginForm.password)
    if (res.code !== 200) return this.$message.error('登录失败')
    this.$message.success('登录成功')
    // 1、将登陆成功之后的token, 保存到客户端的sessionStorage中; localStorage中是持久化的保存
    //   1.1 项目中出现了登录之外的其他API接口,必须在登陆之后才能访问
    //   1.2 token 只应在当前网站打开期间生效,所以将token保存在sessionStorage中
    window.sessionStorage.setItem('token', res.data.token)
    // 2、通过编程式导航跳转到后台主页, 路由地址为:/home
    this.$router.push({
      path: '/Home',
    })
    // 3.将用户的id传到home界面,方便个人信息的修改操作
    window.sessionStorage.setItem('reg_id', res.data.register.regId)
  })
}

如果是其他形式的请求就是:
this.$http.put('***')
this.$http.get('***')
this.$http.delete('***')
前面的await是为了配合上面的async,即异步请求的意思

3. Element-plus中的el-submenu组件的问题

我们在项目中要使用如果需要二级目录就需要使用el-sub-menu标签,但是官网提供的这个el-sub-menu是有问题的,如果这样写会有二级或一级菜单显示不出来的问题,如果有遇到显示有问题的时候可以试试将el-sub-menu换成el-submenu即可解决。

elementplus适配1440 element- plus_elementui_02

4. 引入Element-plus中的Icon图标组件

4.1.安装组件

安装之前看看有下图中右侧的目录中是否有Icon这个文件,有的话就不用下载安装包,然后在main.js中按照下图中左半部分高亮的内容即可导入组件并在全局中使用。

elementplus适配1440 element- plus_前端_03

4.2. 官网提供的安装步骤

这个是官网提供的安装步骤
https://element-plus.org/zh-CN/component/icon.html 如果你在导入下图中高亮的部分时报错(我的报错是icons-vue找不到),请使用4.1提供的方式。
elementplus适配1440 element- plus_javascript_04

5. el-form-item表单验证问题

5.1. 问题:el-form-item的表单输入值后v-model取不到值,导致验证一直不通过

下图是具体的错误内容:

elementplus适配1440 element- plus_javascript_05


这个是我的代码和验证规则,期望的是我输入字母后应该报是否为合法的手机号或邮箱的提示,而不是因为没输入值的提示。

elementplus适配1440 element- plus_elementplus适配1440_06


elementplus适配1440 element- plus_javascript_07

5.2. 问题原因和解决方案

问题原因:el-form-item中的prop的值和el-input中v-model中的值不一致

正确的写法:
prop="regMobile"
v-model="updateRegisterInfoForm.regMobile"
regMobile = regMobile
错误的写法:
prop="mobile"
v-model="updateRegisterInfoForm.regMobile"
mobile ≠ regMobile

elementplus适配1440 element- plus_elementplus适配1440_08


elementplus适配1440 element- plus_elementplus适配1440_09


elementplus适配1440 element- plus_vue.js_10

6. 使用El-button组件的Icon属性时,图标不显示

6.1. 问题

我要实现的效果是下面高亮部分的样子,下面的代码是官网提供的,但是icon前面加":“(冒号)浏览器的控制台会报错。有一位博主的解决办法是去掉icon前面的”:"(冒号),我尝试后无法解决,于是我使用了官网提供的icon图标解决方式解决了该问题,请看6.2。

elementplus适配1440 element- plus_elementplus适配1440_11

6.2. 解决方式

<el-button type="primary" size="small" circle><el-icon><Edit/></el-icon></el-button>
<el-button type="danger" size="small" circle><el-icon><Delete/></el-icon> </el-button>
<el-button type="success" size="small" >Detail</el-button>
<el-button type="warning" size="small" >ResetPassword</el-button>
这是官网提供加载Icon图标的方式:
<el-icon><Edit/></el-icon>

elementplus适配1440 element- plus_elementplus适配1440_12