vue+elementUI+echarts使用过程中遇到的坑--个人总结(不定时更新)

news/2024/7/10 2:47:00 标签: vue

最近在用vue,_(:3」∠)_腥风血雨啊,这里总结一些学习使用过程中遇到的坑,因为是学习中所以会一直更新总结

目前是webpack下开发

 

1、图片的地址要用require(补充:当你的图片资源放在src目录下的话需要)

navList:[
  {src:require('../assets/home.png'),txt:"首页",href:"#" }
]

设置background要用

v-bind:style="{'background':'url('+require('../assets/logo.png')+')'}"

 

2、路由——点击按钮先提交内容获取服务器返回信息后跳转到新页面并显示数据

// 字符串
this.$router.push('/home/first')
// 对象
this.$router.push({ path: '/home/first' })
// 命名的路由
this.$router.push({ name: 'searchResult', params: { result: text }})

3、element-坑

用某些表单时自动生成的import和components要删除,不然       IE下报错页面空白

 

4、element轮播--取消自动播放

用autoplay为false没用,设置interval为0起作用

<el-carousel trigger="click" :interval="0" >

 

5、element-点击显示大图且大图轮播

坑---大图轮播显示当前点击图片首次点击总是报错从第二次点击开始正常

@click="showCarousel(index)"

图片点击的时候把当前index传进去

showCarousel:function (index) {
  this.imgIndex=index;
  this.dialogShow=true;
  if(this.$refs.carousel){
    this.$refs.carousel.setActiveItem(index);
  }
}

调用的方法里修改imgIndex的值,并且把这个变量设置为轮播的initial-index(初始状态激活的幻灯片的索引)

 

<!--弹出框-->
<el-dialog :visible.sync="dialogShow">
  <el-carousel trigger="click" height="620px" :interval="0"  ref="carousel" :initial-index="imgIndex">
      </el-carousel>
</el-dialog>
<!--弹出框-->

 

6、px和rem混用

我们有时要js获取offsetLeft之类的距离得到的是px如果这时我们用的是rem作单位,混合算一些值的时候统一用px来算,宽度之类直接用offsetWidth来获取px而不是用设置好的rem单位值

 

 

7、rem.js的引入(onresize效果也实现)

在src下建一个common(随便起)文件夹存放rem.js文件

自执行方法,这样当页面尺寸改变时rem值也随之改变。

再在main.js里import './common/rem'

rem.js内容

(function(doc, win) {
  let docEl = doc.documentElement,
    resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
    recalc = function() {
      let clientWidth = docEl.clientWidth;
      if (!clientWidth) return;
      docEl.style.fontSize = (clientWidth / 19.2) + 'px';
    };
  if (!doc.addEventListener) return;
  win.addEventListener(resizeEvt, recalc, false);
  doc.addEventListener('DOMContentLoaded', recalc, false);
})(document, window);

 

8、Class绑定

<i v-else :class="{'el-icon-loading':loading,'el-icon-upload':!loading}" class="avatar-uploader-icon"></i>

 

9、echarts

echarts不能通过Vue.use()全局调用,使用有两种方法

一是在需要使用图标的.vue文件中直接引入

import echarts from 'echarts'

然后

let myChart = echarts.init(document.getElementById('myChart'))

如果想要全局使用,可以在main.js引入

import echarts from 'echarts'

然后

Vue.prototype.$echarts = echarts 
let myChart = this.$echarts.init(document.getElementById('myChart'))

 

10、vue+echarts+rem,图表尺寸为rem,点击刷新按钮图表尺寸bug

更改rem.js代码

(function(doc, win) {
  let docEl = doc.documentElement,
    resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
    recalc = function() {
      let clientWidth = docEl.clientWidth;
      if (!clientWidth) return;
      docEl.style.fontSize = (clientWidth / 19.2) + 'px';
    };
  if (!doc.addEventListener) return;
  recalc();//增加这一句代码============================
  win.addEventListener(resizeEvt, recalc, false);
  doc.addEventListener('DOMContentLoaded', recalc, false);
})(document, window);

 

11、父子组件渲染顺序

父beforeCreate->父created->父beforeMount->子beforeCreate->子created->子beforeMount->子mounted->父mounted

 

12、router

{path:'*', redirect:'/'}//如果路径输入错误重新导航至首页

 

13、element 走马灯

@change="carouselChange"
//轮播切换
carouselChange:function (val, oldVal) {
},

val是当前索引,oldVal是上一页的索引

 

14、任何时候当你用了setInterval都请在结束时清除这个定时器clearInterval

别以为你跳转路由渲染新的组件了它就不会继续影响你了_(:3」∠)_,no way

另外补充一个最新发现的接口轮询请求方法可以解决setInterval引起的页面卡死问题

window.setInterval(() => {
  setTimeout(fun, 0)
}, 30000)

 

15、vue请求本地json文件

用到了express,在node安装时已经安装了express

在build-webpack.dev.conf.js文件里添加

const HOST = process.env.HOST

const PORT = process.env.PORT && Number(process.env.PORT)

//这个位置之后添加

/*添加json文件引入-后可删*/

const express=require('express')

const app=express()

var carList=require('../src/common/carList.json')

var carTypeList=require('../src/common/33.json')

var apiRoutes=express.Router()

app.use('/api',apiRoutes)

/*添加json文件引入-后可删*/

watchOptions: {

  poll: config.dev.poll,

}
//这个文件之后添加

/*添加json文件引入-后可删*/

,

before(app){

  app.get('/api/carList',(req,res)=>{

    res.json({

      errno:0,

      data:carList

    })

  }),

    app.get('/api/33',(req,res)=>{

      res.json({

        errno:0,

        data:carTypeList

      })

    })

}

/*添加json文件引入-后可删*/

请求json文件方法

this.$axios.get('/api/carList')

  .then(res=>{

 

16、vue设置button disabled

:disabled="addible"

addible的值是除了false之外的任何值时都将设置为disabled只有为false才会取消禁用

 

17、element table的CheckBox如何设置禁用

<el-table-column

  type="selection"

  :selectable='checkboxInit'

  width="60">

</el-table-column>

设置selectable属性

// CheckBox的初始是否可选状态设置

checkboxInit: function (row,index) {

    if (index === 1 || index === 2 || index === 3){ //这里只是模拟可根据具体需求来写,return 0 就是禁用

    return 0

  } else {

    return 1

  }

}

 

 

 

 

 


http://www.niftyadmin.cn/n/1368224.html

相关文章

JavaScript多张图片放大镜效果(不限定图片尺寸,rem单位)

效果如下&#xff1a;可以展示图片列表的放大镜效果&#xff0c;图片尺寸没有要求会自动调整至水平垂直居中效果代码如下&#xff0c;除了图片要替换一下&#xff0c;其它的可直接运行查看效果&#xff0c;enlarge是图片要放大查看的倍数&#xff0c;注意&#xff1a;.bigBox的…

JavaScript图片的放大缩小及拖拽

实现效果如下&#xff1a; 实现代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>div{width:400px;height:400px;overflow:hidden;position:relative…

在项目中引入新字体

在项目中引入新字体&#xff0c;我的环境是vuewebpack其它环境操作应该差不多 1、下载需要的字体文件&#xff0c;我这里需要的是Letsgo Digital Regular字体&#xff0c;下载压缩包里面只有一个.ttf文件&#xff0c;如果要兼容IE浏览器还需要IE专用文件&#xff0c;推荐在线转…

我要窒息了,我的C币呢,我的C币呢!

我真的要疯了&#xff0c;啊&#xff0c;我的血压&#xff01;&#xff01;C币过期作废&#xff01;&#xff01;我平常辣么省是为了啥为了啥&#xff01;&#xff01; _(:3」∠)_ ∑(‘д′*ノ)ノ ∑(っ Д ;)っ

axios同时多次请求同一个接口(参数不同)导致返回数据混乱

更新&#xff1a;遇到这种情况&#xff0c;首先请后台排查是否是后台问题&#xff0c;我们的项目在遇到不同接口数据也紊乱了之后最终发现是后台问题。。 在这期间前端背了很久的锅&#xff0c;哭 vue项目里使用axios对同一个接口同时进行多次请求导致返回数据混乱&#xff0…

vue+elementUI表单和图片上传及验证

最终实现需求如下图&#xff1a; form表单内容与重点人员图片同时上传且图片为必填项 分析弹框页需要解决的问题有&#xff1a; 1、表单内容的验证及必填项 2、新增和编辑用同一个组件如何处理数据 3、图片需要和信息一起传递&#xff08;即不允许自动上传&#xff09; 4、…

vue+webpack项目环境搭建说明

1、安装node.js环境 根据需求下载32位或64位安装包-node.js官网去下 https://nodejs.org/en/ 查看是否安装成功 cmd -》 node -v 查看node npm -v 查看npm 显示node和npm的版本号则安装成功 2、安装vue\vue-cli #全局安装 vue-cli脚手架 npm intal…

解决vuex存储复杂参数(如对象数组等)刷新数据丢失问题

我需要在搜索页拿到结果之后跳转到搜索结果页并携带搜索结果 尝试过几种方法之后最终采用vuexsessionStorage结合的方法在mutations中 setResultValue(state,flag){sessionStorage.setItem("resultValue", JSON.stringify(flag))state.resultValue flag } 在gett…