vue 中常见问题
问题描述
解决方式
|
v-if 与 v-for 同时使用会报错问题描述在进行项目开发的时候因为在一个标签上同时使用了v-for和v-if两个指令导致的报错。
v-for 的优先级比 v-if 的高,所以每次渲染时都会先循环再进条件判断,而又因为 v-if 会根据条件为 true 或 false来决定渲染与否的,所以如果将 v-if 和 v-for一起使用时会特别消耗性能,如果有语法检查,则会报语法的错误。
<template v-for="Oitem in Object.keys(cItem)"> <el-input type="textarea" :autosize="{ minRows: 2, maxRows: 8}" :key="Oitem" // 注意点:key值写在包裹的元素中 v-if="Oitem !== 'title'" v-model="cItem[Oitem]"> </el-input> </template>
|
key属性值要唯一,且不是index问题描述vue中使用 解决方案使用index 作为 key和没写基本上没区别,因为不管数组的顺序怎么颠倒,index 都是 0, 1, 2...这样排列,导致 Vue 会复用错误的旧子节点,做很多额外的工作。 |
需要深拷贝数组或对象问题描述对象或数组的简单赋值,修改新值也会改变原值。这时我们需要获取原值的深拷贝对象。 解决方案
|
vue 2.0 修改对象属性问题描述在vue 2.0 中,由于Object.defineproperty() 的弊端,给对象新增属性,删除属性,或者对象属性又是一个对象的时候,无法被监听到,页面不会被更新。 解决方案
|
对数组对象,进行深度监听问题描述后端传过来的数组每一项都是对象,当对象的属性变化时调用某个函数,自然想到就是 解决方案
|
样式切换时,动态增加class问题描述当样式需要切换的时候,尽量不要写两个 解决方案给元素动态增加 |
父子组件通信,props单向绑定问题描述vue中的props是单向绑定的,父组件的属性变化时会传递给子组件,子组件内部不应改变props的值,否则控制台会给出警告。虽然当 props的类型为数组或者对象时,在子组件内部改变props的值 vue 检测不到。但官方不建议在子组件内改变父组件的值,因为这违反了vue中props单向绑定的思想。 解决方案
|
vue中函数的this指向问题问题描述箭头函数中的this指向定义后就固定不变; 普通函数中的this指向是变谁调用的指向谁。 created () { // 箭头函数中this指向vue setInterval(() => { console.log(this) }, 1000) // 普通函数中this指向window,因为setInterval()函数是window对象的函数 setInteval(function () { console.log(this) }, 1000) } 解决方案如果要使用普通函数,要使用了一个变量来当中间值 function(){ let temp = this; setInvertal(function(){....}, 1000) } |
页面合并时,各个组件样式冲突问题描述比如两个组件都设有 解决方式
|