Vue日常使用与常见问题
使用:
1.在使用elementUI自定义表格中字段样式
官方文档:https://element.eleme.cn/2.10/#/zh-CN/component/table
# 基础使用 <template> <el-table :data="tableData" style="width: 100%"> <el-table-column prop="date" label="日期" width="180"> </el-table-column> <el-table-column prop="name" label="姓名" width="180"> </el-table-column> <el-table-column prop="address" label="地址"> </el-table-column> </el-table> </template> # 想要在添加自定义样式,需要再字段添加样式 <el-table-column property="val" label="值" align="center" class="red"> <template slot-scope="{ row }"> <span :class="row.val > 0 ? 'red' : 'green'">{{ row.val }}</span> </template> </el-table-column>
2. vue3+elementui 使用cdn方式打造单页面表格内容
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <!-- 引入Vue3 --> <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script> <!-- 引入element-plus样式文件 --> <link rel="stylesheet" href="https://unpkg.com/element-plus/dist/index.css" /> <!-- 引入element-plus组件库 --> <script src="https://unpkg.com/element-plus"></script> <!-- 引入axios --> <script src="https://unpkg.com/axios/dist/axios.min.js"></script> </head> <body> <div id="app"> <!-- 按钮 --> <div> <el-button>Default</el-button> <el-button type="primary">Primary</el-button> <el-button type="success">Success</el-button> <el-button type="info">Info</el-button> <el-button type="warning">Warning</el-button> <el-button type="danger">Danger</el-button> </div> <!-- 表格 --> <div> <!-- stripe斑马条纹不起作用,我也不知道为啥 --> <el-table border stripe="true" :data="userList" style="width: 100%"> <!-- 不要忘记末尾标签 </el-table-column>,否则会显示出错--> <el-table-column type="selection" width="55"></el-table-column> <el-table-column type="index" label="" width="50"></el-table-column> <el-table-column prop="name" label="姓名" width="180"></el-table-column> <el-table-column prop="age" label="年龄" width="180"></el-table-column> <el-table-column prop="email" label="邮箱"></el-table-column> <el-table-column prop="createTime" label="创建时间"></el-table-column> <el-table-column prop="updateTime" label="更改时间"></el-table-column> </el-table> </div> </div> <script> const { createApp, ref } = Vue; createApp({ setup() { const userList = ref([]) return { userList } }, created () { this.showUserList() }, methods: { showUserList(){ //使用axios自定义配置,访问指定地址 const request = axios.create({ baseURL: 'http://localhost:9000' }) request .get('/user/allUsers') .then((response) => { console.log('数据获取成功', response.data) this.userList = response.data }) .catch((error) => { console.log('数据获取失败', error) }) } } // 全部引入ElementPlus }).use(ElementPlus).mount('#app') </script> </body> </html>
其中涉及,axios的使用中传递参数的支持:
//使用axios自定义配置,访问指定地址 const request = axios.create({ baseURL: 'http://xxx.cn', }) request.get('/getData', {params: { start_date: start_date, end_date: end_date, token, }}) .then((response) => { console.log('数据获取成功', response.data) if (response.data.code == 0) { this.dataList = response.data.data } else { ElementPlus.ElMessage.error(response.data.msg) } }) .catch((error) => { console.log('数据获取失败', error) })
时间选择器,涉及中文的支持
<script src="//unpkg.com/element-plus/dist/locale/zh-cn"></script> 进行配置: .use(ElementPlus,{ locale: ElementPlusLocaleZhCn, }).mount('#app')
<el-date-picker
v-model="dt"
type="daterange"
unlink-panels
range-separator="|"
start-placeholder=""
end-placeholder=""
:shortcuts="shortcuts"
:size="size"
:default-time="defaultTime"
class="margin-span"
style="width:30%"
></el-date-picker>
const defaultTime = ref<[Date, Date]>([
new Date(),
new Date(),
])
const dt = ref('')
const shortcuts = [
{
text: '近一星期',
value: () => {
const end = new Date()
const start = new Date()
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
return [start, end]
},
},
{
text: '近一个月',
value: () => {
const end = new Date()
const start = new Date()
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
return [start, end]
},
},
]
# 对于时间参数的处理
let start_date = this.formatDate(new Date());
let end_date = this.formatDate(new Date());
if (this.dt) {
start_date = this.formatDate(this.dt[0]);
end_date = this.formatDate(this.dt[1]);
}
// 日期格式化函数(2024-11-25)
formatDate(date){
var year = date.getFullYear();
var month = ("0" + (date.getMonth() + 1)).slice(-2);
var day = ("0" + date.getDate()).slice(-2);
return year + "-" + month + "-" + day;
}
数据导出
downloadFile(fileName, content){ let aLink = document.createElement('a'); let blob = new Blob([content], {type:"text/csv"}); aLink.download = fileName; aLink.href = URL.createObjectURL(blob); aLink.click(); } // 调用方式, 要求数据是字符串方式,CSV格式(日期,名称\n2024-11-25,lanlang\n) downloadFile(`数据-${cid}.csv`, response.data.data)
3. 锚点与路由
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <!-- 引入Vue3 --> <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script> <!-- vue-router --> <script src="https://unpkg.com/vue-router@4.2.5/dist/vue-router.global.js"></script> <!-- 引入element-plus样式文件 --> <link rel="stylesheet" href="//unpkg.com/element-plus/dist/index.css" /> <!-- 引入element-plus组件库 --> <script src="https://unpkg.com/element-plus"></script> <!-- 引入axios --> <script src="https://unpkg.com/axios/dist/axios.min.js"></script> </head> <body> <div id="app"> <h1>人物介绍-矫厚根</h1> <p> <!-- 路由标签 --> <router-link to="/jbxx">基本信息</router-link> | <router-link to="/zyzp">主要作品</router-link> | <router-link to="/rsgy">人生格言</router-link> </p> <!-- 路由出口 --> <router-view></router-view> </div> <script> const { createApp, ref} = Vue // 1.初始化组件模板 const jbxx = {template:'<div>人气男神-矫厚根,79岁,男,唱跳歌手。</div>'} const zyzp = {template:'<div>《炒鸡蛋三部曲》,《红烧肉92部曲》,《路灯下偷皮鞋的老奶》。</div>'} const rsgy = {template:'<div>我就是我,是不一样的烟火。</div>'} // 2.定义路由列表 const routeList = [ //path:锚点 component组件信息 {path:"/jbxx", component:jbxx}, {path:"/zyzp", component:zyzp}, {path:"/rsgy", component:rsgy} ] // 3.创建路由实例 const router = VueRouter.createRouter({ // history 模式:hash 模式 history: VueRouter.createWebHashHistory(), // 挂载路由列表 routes: routeList }) createApp({ setup() { return { } } }) // 全部引入ElementPlus .use(ElementPlus) // 整个应用支持路由 .use(router) .mount('#app') </script> </body> </html>
常见问题:
1) 使用命令 npm install 安装依赖包的时候,出现错误:
checking for Python executable "python2" in the PATH
解决:
使用cnpm 来安装: 具体做法: 安装cnpm npm install cnpm -g --registry=https://registry.npm.taobao.org 安装gulp-sass 语法都是一样的,只是将npm换成cnpm cnpm install --save-dev gulp-sass
使用npm安装node-sass时, 也出现了该报错
使用dart-sass来替换node-sass yarn add node-sass@yarn:dart-sass -D 或者 npm install node-sass@npm:dart-sass -D // 更推荐使用yarn
2)使用nginx进行部署的时候, 出现无法使用代理访问后台接口的情况, 需要nginx添加额外配置信息
location /api { rewrite ^.+api/?(.*)$ /$1 break; include uwsgi_params; proxy_pass http://d.xxx.com; }
3)在使用qrcodejs2-fix的时候, 运行会出现错误:TypeError:Cannot read properties of undefined(reading'_android')
解决:
去掉qrcodejs2 插件,引入qrcodejs2-fix npm i --save qrcodejs2-fix 在页面中使用,引入依赖 import QRCode from 'qrcodejs2-fix'

浙公网安备 33010602011771号