刷新页面,传的参数类型变了

问题描述

vue-router通过query传参,比如:?fromWork=true&extraType=1,传过去的fromWorkboolean型,extraTypenumber型,但是当刷新页面时,拿到的参数都变成了字符串。

解决方式

  • 拿到参数后进行类型转换

  • 用boolean型用0/1代替,如果需要number型,则在页面转换


页面合并时,各个组件样式冲突

问题描述

比如两个组件都设有background-color,一个为red,另一个为green,都在App页面中引入使用了。页面渲染时会发生合并,样式冲突。后引入的组件样式会覆盖先引入的组件样式。

解决方式

  • css中引入scoped


v-if 与 v-for 同时使用会报错

问题描述

在进行项目开发的时候因为在一个标签上同时使用了v-for和v-if两个指令导致的报错。

提示错误:The 'undefined' variable inside 'v-for' directive should be replaced with a computed property that returns filtered array instead. You should not mix 'v-for' with 'v-if'

v-for 的优先级比 v-if 的高,所以每次渲染时都会先循环再进条件判断,而又因为 v-if 会根据条件为 true 或 false来决定渲染与否的,所以如果将 v-if 和 v-for一起使用时会特别消耗性能,如果有语法检查,则会报语法的错误。

解决方式

  • 将 v-for 放在外层嵌套 template (页面渲染不生成 DOM节点) ,然后在内部进行 v-if 判断

<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>
  • 如果条件出现在循环内部,不得不放在一起,可通过计算属性computed 提前过滤掉那些不需要显示的项


key属性值要唯一,且不是index

问题描述

vue中使用 v-ifv-for 要加上key属性,否则在高版本的vue中控制台会报错。这个Key是一个唯一值,不能是index。key一般应用在v-ifv-for中更新渲染时,它们都是默认“就地复用” 的策略。

解决方案

使用index 作为 key和没写基本上没区别,因为不管数组的顺序怎么颠倒,index 都是 0, 1, 2...这样排列,导致 Vue 会复用错误的旧子节点,做很多额外的工作。


需要深拷贝数组或对象

问题描述

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

解决方案

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

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


vue 2.0 修改对象属性

问题描述

在vue 2.0 中,由于Object.defineproperty() 的弊端,给对象新增属性,删除属性,或者对象属性又是一个对象的时候,无法被监听到,页面不会被更新。

解决方案

  • vue 3.0 中使用Proxy 解决了这个问题。

  • 使用Vue.$set() 进行修改。


对数组对象,进行深度监听

问题描述

后端传过来的数组每一项都是对象,当对象的属性变化时调用某个函数,自然想到就是watch方法。但如何watch数组对象中某一个具体的属性,显然不可能一个个属性写watch

解决方案

  • watch整个数组,设置deeptrue,当该对象发生改变时,调用处理函数。

  • 将页面中绑定的属性写在computed函数中,watch这个computed中的函数,当对象值改变时会进入computed函数中,进而进入watch函数中,再调用处理函数。


样式切换时,动态增加class

问题描述

当样式需要切换的时候,尽量不要写两个 v-ifv-show 来切换样式。v-show 不是惰性的,在没有必要的时候,还是插入在DOM中;然后v-if 又有一个明显的创建和删除过程。可以通过动态添加class 的方法切换样式。

解决方案

给元素动态增加class时,可以在模板中通过:class={‘hasClass’: ifHasClass}来实现,当ifHasClasstrue时,该元素会自动加上hasClass的样式。 如果在一个元素中使用了两个class则会报错,动态绑定的class可以与正常写的一起使用。


父子组件通信,props单向绑定

问题描述

vue中的props是单向绑定的,父组件的属性变化时会传递给子组件,子组件内部不应改变props的值,否则控制台会给出警告。虽然当 props的类型为数组或者对象时,在子组件内部改变props的值 vue 检测不到。但官方不建议在子组件内改变父组件的值,因为这违反了vue中props单向绑定的思想。

解决方案

  • eventBus事件总线适用于父子组件非父子组件等之间的通信。

  • 依赖注入(provide / inject)用于父子组件祖孙组件之间的通信。

    provide(发送) / inject(接收)是Vue提供的两个钩子,和datamethods是同级的。


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)
}

Vue 项目中常遇到的问题的更多相关文章

  1. vue 项目中实用的小技巧

    # 在Vue 项目中引入Bootstrap 有时在vue项目中会根据需求引入Bootstrap,而Bootstrap又是依赖于jQuery的,在使用npm按照时,可能会出现一系列的错误 1.安装jQu ...

  2. 如何在VUE项目中添加ESLint

    如何在VUE项目中添加ESLint 1. 首先在项目的根目录下 新建 .eslintrc.js文件,其配置规则可以如下:(自己小整理了一份),所有的代码如下: // https://eslint.or ...

  3. 在vue项目中, mock数据

    1. 在根目录下创建 test 目录, 用来存放模拟的 json 数据, 在 test 目录下创建模拟的数据 data.json 文件 2.在build目录下的 dev-server.js的文件作如下 ...

  4. 浅谈 Axios 在 Vue 项目中的使用

    介绍 Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中. 特性 它主要有如下特性: 浏览器端发起XMLHttpRequests请求 Node端发起http ...

  5. 去除vue项目中的#及其ie9兼容性

    一.如何去除vue项目中访问地址的# vue2中在路由配置中添加mode(vue-cli创建的项目在src/router/index.js) export default new Router({ m ...

  6. vue 项目中当访问路由不存在的时候默认访问404页面

    前言: 在Vue项目中,当访问的页面路由不存在或错误时,页面显示为一片空白.然而,通常我们需要对访问url不存在或者错误的情况下添加默认的404页面,即not found页面. 一般的处理方法是: 在 ...

  7. vue项目中遇到的那些事。

    前言 有好几天没更新文章了.这段实际忙着做了一个vue的项目,从 19 天前开始,到今天刚好 20 天,独立完成. 做vue项目做这个项目一方面能为工作做一些准备,一方面也精进一下技术. 技术栈:vu ...

  8. scss/less语法以及在vue项目中的使用(转载)

    1.scss与less都是css的预处理器,首先我们的明白为什么要用scss与less,因为css只是一种标记语言,其中并没有函数变量之类的,所以当写复杂的样式时必然存在局限性,不灵活,而scss与l ...

  9. Vue项目中GraphQL入门学习与应用

    1.GraphQL是什么,能干什么? 正如官网所说,GraphQL是一种用于API查询的语言.Facebook 的移动应用从 2012 年就开始使用 GraphQL.GraphQL 规范于 2015 ...

随机推荐

  1. 通过shell脚本进行linux服务器的CPU和内存压测

    文章目录 内存压测 python的方式 shell的方式 cpu压测 在正常手段下,这个只是压测的方法 在不正常手段下(crontab计划任务),可以提高CPU和内存的使用率 什么?你问我为什么要提高 ...

  2. 如何利用Smartbi做数据分析:2018内5月热销乘用车分析报告

    在2018年第一季度热销乘用车分析报告中,SUV以总体销量15.4%的同比增长率让人不可小觑,Smartbi刚得到5月分析的数据就迫不及待的来看看是否热度不减,结果在5月这个所谓汽车销售淡季,轿车以9 ...

  3. Zookeeper应用场景和ZAB协议

    Zookeeper应用场景 数据发布/订阅(配置中心) 我们平常的开发过程中,经常会碰到这样的需求:系统中需要一些通用的配置信息,如一些运行时的开关.前端需要展示的通知信息.数据库配置信息等等.这些需 ...

  4. 通过Xshell或Xftp链接Windows10子系统Linux

    1.打开linux系统 2.切换到root角色 sudo -i //切换到root 并输入密码 3.卸载安装ssh server sudo apt-get remove openssh-server ...

  5. LeetCode-099-恢复二叉搜索树

    恢复二叉搜索树 题目描述:给你二叉搜索树的根节点 root ,该树中的两个节点被错误地交换.请在不改变其结构的情况下,恢复这棵树. 进阶:使用 O(n) 空间复杂度的解法很容易实现.你能想出一个只使用 ...

  6. 『现学现忘』Docker相关概念 — 6、虚拟化技术分类

    目录 1.按照虚拟化的程度分类 (1)完全虚拟化技术 (2)半虚拟化技术 (3)完全虚拟化与半虚拟化优缺点 2.从虚拟化架构分类 (1)寄居架构 (2)裸金属架构 虚拟化是一个广义的术语,是指计算元件 ...

  7. php 23种设计模型 - 代理模式

    代理模式(Proxy) 在代理模式(Proxy Pattern)中,一个类代表另一个类的功能.这种类型的设计模式属于结构型模式. 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口. 介 ...

  8. Java学习笔记:02面向对象-重写_this_super_抽象类

    02面向对象-重写/this/super/抽象类 ****1.this和super 作用: this: 区分本类的成员变量和局部变量同名情况 super:区分父类的成员变量和局部变量同名情况 用法: ...

  9. LGP3126题解

    这道题还有点意思. 路径要求是一个回文串,回文串立马枚举中点.中点只可能在对角线上. 枚举对角线上的一个点,然后两边的路径必须完全相同. 既然路径上的字符必须完全相同,那么每个前缀也必须完全相同. 考 ...

  10. 源码安装Vim并配置YCM自动补全插件

    Compiling Vim from source is actually not that difficult. Here's what you should do: 1. Install all ...