报错
1. JSON.parse()使用报错:Unexped token 0 in JSON at position "1",
原因是需要转换的字段已经是object类型,不可再转换。
2. 存在Vuex的数据是json格式,使用之前需要用JSON.parse()转换为对象格式。
常识
1. Vue更新数据:
1) Vue不监听数组直接赋值更新,必须用数组方法来更新,比如splice(下标index,1,更改值);
2) 若清空数组,除了可以通过for循环一一清空之外;
还可以通过 arr.splice(0) 的方式清空,使用该方法的前提是 arr.length != 0;
3)如果想要给data中原有对象中添加属性,必须使用 this.$set(obj,"属性值","值") 才可更新视图。
2. 当用eventBus传值不渲染数据时,两种解决方法:
1) 将赋值操作放在mounted里面,获取bus传过来的值操作放在created里面;
2) 将数据放在vuex中。
关于对bus传值的理解:
1) bus.$on()函数在页面初始化时会先声明,相当于定义该函数;
2) emit触发函数之后on()函数的函数体才会执行;
3) 如果遇到bus嵌套的场景,emit操作要发生在另一个on()之后操作。
4) bus传值不仅可以用于兄弟组件之间,还可用于父子组件之间。
3. computed里面必须有返回值,所以不可以有异步操作。
4. 关于在main.js中引入插件的三种方式:
1) Vue.use(): 不是为了vue写的插件不支持Vue.use()方式,比如Vue.use(ElemetUI);
2) new Vue: 非Vue官方库不支持new Vue()方式,比如new Vue(router);
3) Vue.prototype. : 每一个组件都是Vue的实例,所以组件内通过this可以拿到Vue.prototype上添加的属性和方法,比如Vue.prototype.$http(axios)
***:基于vue的插件,推荐使用Vue.use();
不是基于Vue的插件,建议使用Vue.prototype.自定义名称 = 插件名。
5. 父子传值
1) 子传父:
子组件:this.$emit("事件名",参数);
父组件:<子组件 @事件名="方法名"></子组件>
methods:{
方法名(参数){ 操作 }
}
2) 父传子:
父组件:定义数据(:value="msg")
子组件:props:["value"]接收数据,其名字与父组件属性名一致。
6. Vuex和本地存储的区别
1) Vuex主要用于组件之间的传值;(单html)
2) 本地存储用于多页面之间传值;(多html)
3) localStorage和sessionStorage只能存储String类型,复杂对象可以用JSON.Stringify()和JSON.parse()转换。
7. home页面引入的插件如若使用 /deep/ 修改其自定义样式,那么会影响该插件在子组件页面的显示样式。
8. 禁止用户缩放且不可在两个手指放大,在打包出来的 .html 文件内的meta标签上添加属性:user-scalable=0,maxinum-scale=1.0。
9. 重复点击相同菜单对应路由时会报错,是因为vue中自带的不可点击相同地址的警告,解决方案:将vue-router降级至@3.0.7。
10. 使用reverse()方法时,不可直接操作data对象中的数据,否则会陷入死循环。
11. 由axios发请求提交数据时,如果某字段的值为null,axios是不会提交该字段。
12. vue项目中普通字符串格式化为好看的json格式并且展示在前端的插件:vue-json-viewer(基于vue的)。
13. 关于用vue-cli创建项目时的步骤解析:
1)vue create 项目名称
2)选择Manually select features
3)选中babel(转换es6和es7等高级为es5浏览器可识别的)、路由、vuex(视情况选择)、css预处理器(css Pre-processors)、代码风格工具(Linter/Formatter)
4)选择预处理器less
5)选择代码分格
--ESLint with error prevention only只进行报错提醒
--ESLint + Prettier(使用ESLint官网推荐的规则 + Prettier第三方的配置Prettier主要是做风格统一)
--选择ESLint + Standard config会出现与vscode插件eslint冲突出现格式错误很麻烦
6)保存代码和检查风格都选
7)生成配置文件存放位置package.json
14. 关于使用el-table中的多选和分页显示的问题:
使用多选功能时如果分页则会清空多选的状态,如果想要保持之前选中的多选状态,则需要以下操作:
----在el-table上添加 :row-key="getRowKeys" ,定义getRowKeys方法,getRowKeys(row){ return row.id };
----在type为selection的el-table-column上添加reserve-selection属性,值为true;注意只能在selection上使用;
----定义selection-change这个事件用来保存选中数据(@selection-change="chooseList")。