记首次开博 html
给你们分享最近踩到的一个vue开发中的坑vue
最近跳槽换了一家公司,技术栈也从Ng4换成了vue.js 2.0版本,使用的vue-cli脚手架webpack
因为是开发的一个后台管理系统 大部分模块的table都差不太多,那固然是选择使用继承的方式来实现 less code,do more things!web
查阅vue官方API发现确实也提供了extends解决途径vue-cli
当我开发好base基类组件 业务组件中也成功继承到了基类组件后 项目也按照预期实现了效果less
(因为如今在家,公司项目代码没在本身电脑本地,就随便写了个todo,方便你们理解)this
下面的是个人基类base组件spa
我在data里面定义了一个属性a,值为空的字符串
3d
<template> <div> 这是基类组件 <button @click="onclick">返回首页</button> </div> </template> <script> export default { data () { return { a: '' } }, created () { console.log(this.a) }, methods: { onclick () { this.$router.push({name: 'home'}) } } } </script>
常见的思路通常是业务组件能够重写父类属性a,code
好比我在业务组件中但愿个人属性a是 ‘6’
<script> import baseC from './base' export default { extends: baseC, data () { return { a: '6' } }, created () { console.log(this.a) }, methods: {} } </script>
确实改写成功了 然而这个时候问题来了
当时我看到extends实现了,我便继续进一步编写个人base基类组件 ctrl+s保存
却发现修改的属性还原了,好比我在base组件仅仅作个以下修改:
<template> <div> 这是基类组件 <button @click="onclick">返回首页</button> </div> </template> <script> export default { data () { return { a: '' } }, created () { console.log('假如这是我修改的') console.log(this.a) }, methods: { onclick () { this.$router.push({name: 'home'}) } } } </script>
这个时候虽然我直接写死的console.log('假如这是我修改的')打印了,也就是意味着个人base组件是加载了的,可是接下来的
console.log(this.a)打印为空 也就是说个人业务组此时此刻并无改写到个人基类中的a属性
并且即使是我刷新或者放回首页刷新都依旧打印为空,有时候刷新又能够
猜测到直接致使这个BUG的缘由多是我修改了基类组件后 webpack热重载 致使的
打开控制台source, 看到在个人本地生成了一个带有哈希值的热重载文件:
明眼人应该看到这里就懂了吧, 热重载只是局部更新个人base组件 并没让个人业务组件重加载,
也就致使base组件的a属性没有获得修改
解决办法就是到webpack的配置文件中禁止使用模块热重载,总之这样其实并不会影响生产上,只是开发的时候注意下就行