Vue笔记1

问:为什么要用虚拟DOM?

答:虚拟DOM其实就是对象,操作对象的成本比操作DOM的成本更低,所以要用虚拟DOM


问:为什么vue环境的项目里不会出现原始的大括号?

答:在vue实例化之前 app里面的都是普通文本,而.vue文件里面的都是组件,当mounted之前,组件里的 {{}} 早就在编译过程中被替换了,所以你不会看到{{}},


vue导出excel:


Props的验证功能,在普通的html引入vue的写法里,就算从外面引入的prop不合法,仍然不会报错;在用了vue-cli环境的项目里,从外面引入的prop不合法,会报错,但是注意,虽然会报错,但是浏览器仍然会尽量去渲染


问:怎么优化下面的代码,让代码更简洁?

答:


如果一个vue文件的id是a,另一个vue文件的id也是a,两个vue文件都写document.getElementById('a')时,就会出现问题


如果想让vue文件的style标签里的某些内容在全局生效,这样写:

/deep/.abc{}

或者这样:

::v-deep .abc{}

这样,.abc{}的代码,就会在全局生效


问:我移动了一下上次那个项目的目录,在项目外面多套了一层文件夹,运行时就产生了截图里的报错,怎么解决?

答:最简单的解决办法就是:删除node_modules文件夹,再cnpm i,就能运行了,更高级的解决方案和思路就是:可能有很多依赖在安装时带上了项目的路径配置在里面,所以会这样,你去modules目录搜索就能看到路径的内容


当运行npm run serve时,其实是去运行node_modules下的.bin文件夹下的vue-cli-service.cmd


打包以后的路径,要写相对路径,不能写'/static/xxx',要写static/xxx,写相对路径时,包放在哪里都能用,也能在浏览器里双击打开,但是如果是写绝对路径,就只能放在服务器里才能运行,并且只能放在固定的某个服务器目录下

问:为什么点击‘给a加1’按钮时,为什么addToB这个方法也被调用了?我的理解是:a被修改了,但是b和age没有被修改,为什么会调用addToB这个方法呢?

答:

发现每次调用一个methods,页面似乎是会完全重新渲染一遍,加上我是直接在div里的methods后面加上括号了,所以里面的methods会再执行1遍
参考链接:https://www.cnblogs.com/dangdanghepingping/p/10160975.html



问:keep-alive有什么问题吗?
答:嵌套路由可能无法正确显示


修改了webpack配置以后,要重启服务,新代码才能生效



vue文件里不要写css文件,要在webpack.base.conf.js里的app入口文件里加入index.css文件地址就行了,在index.css引入各个组件所需要的css文件



问:https://cn.vuejs.org/v2/guide/list.html:vue给data的对象同时添加多个属性时,我认为Object.assign(vm.userProfile, { age: 27, favoriteColor: 'Vue Green' })和vm.userProfile = Object.assign({}, vm.userProfile, { age: 27, favoriteColor: 'Vue Green' })的区别是:第1种写法没有改变vm.userProfile的地址,第2种写法改变了vm.userProfile的地址,为什么要改变地址才能给data的对象添加响应式属性呢?

答:js无法直接检测数组和对象的变化,诸多方法里面给一个新的对象和数组成本最低了



问:需求:判断是否登录,如果没有登录,跳到登录页,代码:

结果页面陷入了死循环:

如何解决上面这个问题?

答:判断id是否存在前加入这段代码:

参考下面这个链接:

https://segmentfault.com/a/1190000011042794



代码:

问:按理说,this.$nextTick是在dom发生变化时调用的,怎么alert('已经隐藏了');的时候,div1还没隐藏?
答:在alert('已经隐藏了');之前获取#div1,发现是null,我的理解是:其实这时#div1已经没有了,只是chrome让#div1消失的时间延后了,在firefox浏览器里测试是没有这个问题的



今天复习vue生命周期的beforeUpdate时,遇到一个疑惑,在beforeUpdate里打印age这个div的时候,里面的值是1,打印age.innerHTML是真正的更新前的值,谁知道这其中的原因吗?

因为age是一个引用类型,console.log打印引用类型就有这样的特性,显示的是最新的值。和vue的生命周期无关


代码如下:

var buttonCounter2Data = {

  count: 0

}

Vue.component('button-counter2', {

  data: function () {

    return buttonCounter2Data

  },

  template: ''

});

点击第1个,第2个的count值会被影响到吗?

不能调用计算属性,因为计算属性不是函数

问:因为我访问codesandbox.io太慢了,找了另一个插件,http://js.jirengu.com/copolofuka/1/edit?html,js,output

同样的判断条件,而且判断条件都是false,v-show能显示里面的东西,v-if却不能,你们能帮我看下吗?

答:原因是v-show 不支持