更新时间:2018-07-29

1.data functions should return an object


// 这个问题是 Vue 实例内,单组件的data必须返回一个对象;如下
<script>
export default {
data () {
return {}
}
}
</script>
// 为什么要 return 一个数据对象呢?
官方解释如下: data 必须声明为返回一个初始数据对象的函数,因为组件可能被用来创建多个实例。如果 data 仍然是一个纯粹的对象,则所有的实例将共享引用同一个数据对象!

2.我给组件内的原生控件添加事件,怎么不生效了


<!--比如用了第三方框架,或者一些封装的内置组件; 然后想绑定事件-->
<!--例1-->
<el-input placeholder="请输入关键词" @mouseover="testKeyword"></el-input>
<!--例2-->
<router-link to="/aaa" @click="navTab">导航</router-link>
<!--上面的两个例子都没法触发事件!!!-->
<!--究其原因,少了一个修饰符 .native-->
<!--官方文档:你可能有很多次想要在一个组件的根元素上直接监听一个原生事件。这时,你可以使 用 v-on 的 .native 修饰符:-->
<base-input v-on:focus.native="onFocus"></base-input>

3.我用了 axios或ES6promise新特性, 为什么 IE 浏览器不识别(IE9+)


IE系列不能识别promise特性,在webpack入口处添加babel-polyfill插件
module.exports = {
context: path.resolve(__dirname, '../'),
entry: {
// 使用babel-polyfill 可以模拟ES6使用的环境,可以使用ES6的所有新方法
app: ["babel-polyfill", "./src/main.js"]
},
...
}

4.跨域问题No 'Access-Control-Allow-Origin' header is present on the requested resource.

1: CORS 前后端都要对应去配置,IE10+
2: nginx 反向代理,线上环境可以用这个详细配置可以看我另一篇文章nginx反向代理
3:jsonp 只支持get方式,局限太大

如果你用的是vue-cli脚手架生成的目录结构,开发环境可以配置proxyTable来解决跨域,本质上也是node.js代理了请求


// 在 config 目录下的index.js
// target : 就是 api 的代理的实际路径
// pathRewrite : 就是路径重定向
proxyTable: {
"/apis": {
target: "http://10.1.1.1:8090",
changeOrigin: true,
pathRewrite: {
"^/": "/"
}
}
}

5.明明更改了数组元素的内容,或者添加删除了对象的属性,视图为什么没有更新


// 由于 JavaScript 的限制,Vue 不能检测以下变动的数组:
// 当你利用索引直接设置一个项时,例如:vm.items[indexOfItem] = newValue
// 当你修改数组的长度时,例如:vm.items.length = newLength
// 还是由于 JavaScript 的限制,Vue 不能检测对象属性的添加或删除:
var vm = new Vue({
data: {
a: 1
}
})
// `vm.a` 现在是响应式的
vm.b = 2
// `vm.b` 不是响应式的
// 解决办法:this.$set(obj,item,value);

官方文档传送门:vue

6.为什么我的组件间的样式不能继承或者覆写


// 单组件开发模式下,请确认是否开启了 CSS模块化功能!!
// 也就是scoped(vue-cli 里面配置了,只要加入这个属性就自动启用)
// <style lang="stylus" scoped></style>复制代码为什么不能继承或者覆写呢,那时因为每个类或者 id 乃至标签都会给自动在css后面添加hash!
// 写的时候是这个
.test{}
// 编译过后,加上了 hash
.test[data-v-1ec35ffc]{}

7.路由模式改为history后,除了首次启动首页没报错,刷新访问路由都报错

当你使用 history 模式时,URL 就像正常的 url,例如 http://yoursite.com/user/id,也好看!
不过这种模式要玩好,还需要后台配置支持。因为我们的应用是个单页客户端应用,如果后台没有正确的配置,当用户在浏览器直接访问 http://oursite.com/user/id 就会返回 404,这就不好看了。
所以呢,你要在服务端增加一个覆盖所有情况的候选资源:如果 URL 匹配不到任何静态资源,则应该返回同一个 index.html 页面,这个页面就是你 app 依赖的页面。
官方文档:vue-router

8.父组件如何直接调用子组件的方法

可以通过$refs或者$chilren来拿到对应的vue实例,从而操作

9.组件的通讯方式有几种

父传子: props
子传父: this.$emit(funName, arg)
兄弟通讯:
event bus: 就是找一个中间组件来作为信息传递中介
vuex: 状态管理,为了避免刷新时丢失数据可以和localStorage或sessionStorage本地存储结合使用
传送门:
vue官方组件间的通讯
vuex

10.既然localStorage和sessionStorage能做到数据维护,为什么还要引入vuex

可维护性: 因为是单向数据流,所有状态是有迹可循的...数据的传递也可以及时分发响应
易用性: 它使得我们组件间的通讯变得更强大,而不用借助中间件这类来实现不同组件间的通讯

11.vuex的用户信息为什么还要存一遍在浏览器里(sessionStorage or localStorage)

vuex的store保存在浏览器的缓存内,若用户刷新的话,数据将会丢失

12.npm run dev 报端口错误!Error: listen EADDRINUSE :::8080

若果是vue-cli脚手架搭建的vue项目
更改webpack 配置: config/index.js


dev: {
env: require("./dev.env"),
port: 8080, // 更改启动端口
...
}

若是自己搭建的nodejs服务,或nginx服务,更改启动的端口号就行

13.什么时候用v-if,什么用 v-show

v-if : DOM 区域没有生成,只有条件为真时才渲染
v-show: DOM 区域在组件渲染的时候同时渲染了,只是display:none

14.@/components/layout/xxx'中的@是什么意思


// webpack可以配置alias(也就是路径别名)
// 若是vue-cli脚手架位置在build/webpack.base.conf.js
resolve: {
extensions: ['.js', '.vue', '.json'],
alias: {
'vue$': 'vue/dist/vue.esm.js',
'@': resolve('src'),
'common': resolve('./src/common'),
'components': resolve('./src/components'),
'api': resolve('./src/api'),
'base': resolve('./src/base')
}
// 尽情配置吧

15.我在函数内用了this.xxx=,为什么抛出Cannot set property 'xxx' of undefined


这又是this的套路了..this是和当前运行的上下文绑定的...
一般你在axios或者其他 promise , 或者setInterval 这些默认都是指向最外层的全局钩子.
简单点说:"最外层的上下文就是 window,vue内则是 Vue 对象而不是实例!";
解决方案:
暂存法: 函数内先缓存 this , let that = this;(let是 es6, es5用 var)
箭头函数: 会强行关联当前运行区域为 this 的上下文;

来源:https://segmentfault.com/a/1190000015802837

vue项目开发过程常见问题的更多相关文章

  1. Vue项目打包常见问题整理

    Vue 项目在开发时运行正常,打包发布后却出现各种报错,这里整理一下遇到的问题,以备忘. 1.js 路径问题 脚手架默认打包的路径为绝对路径,改为相对路径.修改 config/index.js 中 b ...

  2. vue项目中常见问题及解决方案

    webpack项目中自动引入全局scss变量文件 假设我们有一个公共的scss变量文件variables.scss /*存放所有全局变量*/ $card-title:#C7D200; //首页 卡片标 ...

  3. vue项目中的常见问题

    总结了几个vue项目开发过程中遇到的常见问题,希望大家注意. 注:文末有福利! 一.样式问题 1.vue中使用less 安装less依赖 npm install less less-loader -- ...

  4. 解决关于 vue项目中 点击按钮路由多了个问号

    问题描述: 在vue项目开发过程中,点击按钮结果页面刷新了一遍 后来发现路径变成了 localhost:8080/?#/login 原因: 这里是 form 表单,点击了button 按钮,触发了他的 ...

  5. 21、解决关于 vue项目中 点击按钮路由多了个问号

    在vue项目开发过程中,点击按钮结果页面刷新了一遍 后来发现路径变成了 localhost:8080/?#/login 原因: 这里是 form 表单,点击了button 按钮,触发了他的默认事件,就 ...

  6. 在Vue项目中,添加的背景图片在服务器上不显示,如何处理

    遇到的问题: 在vue项目开发过程中,我们常常会在页面中添加背景图片.可是当我们在样式中添加了背景图片,编译打包部署到服务器上时,发现图片并不能显示出来,这是为什么呢~~~ 我们一般写的css样式如下 ...

  7. vue项目中的常见问题(vue-cli版本3.0.0)

    一.样式问题 1.vue中使用less 安装less依赖 npm install less less-loader --save-dev 在使用时 在style标签中加入 lang="les ...

  8. 手把手教你用vue-cli搭建vue项目

    手把手教你用vue-cli搭建vue项目 本篇主要是利用vue-cli来搭建vue项目,其中前提是node和npm已经安装好,文章结尾将会简单提到一个简单的例子.使用vue-cli搭建项目最开始我也是 ...

  9. 如何用vue-cli初始化一个vue项目

    单文件组件和vue-loader 解析打包.vue文件 vue为了能够使我们在项目开发中对组件进行更好的维护,提供了一个单文件组件系统,vue把每一个独立的组件放在一个.vue的文件中,在这个文件中提 ...

随机推荐

  1. jdk11下载安装及环境变量配置

    jdk11下载安装及环境变量配置 官网地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-50666 ...

  2. Luogu P3007 [USACO11JAN]大陆议会The Continental Cowngress

    P3007 [USACO11JAN]大陆议会The Continental Cowngress 题意 题意翻译 简述:给出\(n\)个法案,\(m\)头牛的意见,每头牛有两个表决格式为"支持 ...

  3. 廖雪峰Java9正则表达式-2正则表达式进阶-5非贪婪匹配

    1.贪婪匹配 问题:给定一个字符串表示的数字,判断该数字末尾0的个数? "123000": 3个0 "10100": 2个0 "1001": ...

  4. js节点

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 位操作(求[a, b] 中二进制位为1的个数最多的数)

    传送门 题意:求区间[a, b]中二进制位为1的个数最多的那个数,如果存在多解,则输出最小的那个.(0 <= a <= b) 关键: 对一个数a可以利用 a | (a + 1) 来将a的二 ...

  6. OpenCASCADE动画功能

    OpenCASCADE动画功能 eryar@163.com 1.Introduction OpenCASCADE提供了类AIS_Animation等来实现简单的动画功能. 从其类图可以看出,动画功能有 ...

  7. Eureka配置问题

    在使用Spring Cloud做微服务开发中,经常会使用Eureka Server作为注册中心,如果配置不当可能会导致一些不可预期的异常信息.以下是我最近遇到的因为忽略了配置eureka.client ...

  8. Leetcode238. Product of Array Except Self除自身以外数组的乘积

    给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积. 示例: 输入: [1 ...

  9. Leetcode138. Copy List with Random Pointer复制带随机指针的链表

    给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点. 要求返回这个链表的深度拷贝. 方法一: class Solution { public: RandomLis ...

  10. Redis 持久化之RDB和AOF详解

    一.RDB 详解 RDB 是 Redis 默认的持久化方案.在指定的时间间隔内,执行指定次数的写操作,则会将内存中的数据写入到磁盘中.即在指定目录下生成一个dump.rdb文件.Redis 重启会通过 ...