vue项目中遇到的问题 2022.09.28周三

一、修改第三方组件库样式

需求:很多时候第三方组件库的样式不满足需求,需要进行修改

常见的方法:

方法一:/deep/

方法二:::v-deep

二、vue引入本地图片的特殊情况

介绍:除了img标签的src和css的background:url(),其他情况想要引用本地项目的静态资源图片需要用require(../../assets/img/aaa.png)的格式,而不能直接用../../assets/img/aaa.png格式引入。

示例:在某个组件内引用,如echart或G6引擎中的图标img或icon

icon: {
       show: true,
       cursor: pointer,
       img: require(../../assets/img/aa.png),
       width: 75,
       height: 91
     },
三、mounted生命周期里请求数据导致页面闪屏

其实就是加载时机问题,放在created里会比mounted触发早一点,如果在页面完之前请求完成的话就不会看到闪屏了

四、修改完数据点击提交后,数据更新,但页面没有更新

原因:vue在视图更新时无法监测数组某个对象的属性值的变化(数组是引用数据类型,没有set和get方法)

解决方法:

方法一:this.$nextTick()

介绍:延迟执行回调,修改数据后调用这个方法,获取更新后的dom

方法二:this.$set(this.obj,key,val)

介绍:第一个参数是目标对象,第二个参数是要修改的数据下标,第三个参数是修改后的新值

方法三:this.$forceUpdate()强制刷新

五、深拷贝数组或对象

介绍:对象或数组的简单赋值,修改新值也会改变原值。这时我们需要获取原值的深拷贝对象。

对于对象,可以通过newObj = JSON.parse(JSON.stringfy(obj))实现。

对于数组,可以通过 newArr = […arr]或者newArr = arr.slice(0)来实现。

六、vuex数据刷新后消失问题

解决方法:获取到数据往store中存时,利用 window.localStorage.setItem(‘key’, value) 也存储一份相同数据 ,当在获取数据时判断存储的数据是否为空(如果是数组就判断长度是否为0,总之这儿就是判断),若不为空(数组长度不为0)直接获取,否则利用 window.localStorage.getItem(‘key’) 来获取。

示例:

vue组件中:

this.$store.commit(setUserId, item.id)
      window.localStorage.setItem(userId, JSON.stringify(item.id))

store中:

getters: {
    loginIn: state => {
      let loginIn = state.loginIn
      if (!loginIn) {
        loginIn = JSON.parse(window.localStorage.getItem(loginIn) || null)
      }
      return loginIn
    },
}
七、vue项目不兼容IE浏览器

1. 安装插件babel-polyfill

npm install --save-dev babel-polyfill

2.main.js导入

import babel-polyfill
八、路由懒加载(延迟加载)

非懒加载:

import Index from @/page/index/index;
export default new Router({  
    routes: [    
        { 
            path: /, 
            name: Index,     
            component: Index 
        }
    ]
})

懒加载:

export default new Router({
  routes: [    
        { 
            path: /, 
            name: Index, 
            component: resolve => require([@/view/index/index], resolve) 
        }
   ]
})
经验分享 程序员 微信小程序 职场和发展