Vue集锦

148 阅读3分钟

报错

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.09. 重复点击相同菜单对应路由时会报错,是因为vue中自带的不可点击相同地址的警告,解决方案:将vue-router降级至@3.0.710. 使用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  //我选择less
    5)选择代码分格
      --ESLint with error prevention only只进行报错提醒
      --ESLint + Prettier(使用ESLint官网推荐的规则 + Prettier第三方的配置Prettier主要是做风格统一)
      --选择ESLint + Standard config会出现与vscode插件eslint冲突出现格式错误很麻烦
    6)保存代码和检查风格都选  //Lint on save 和 Lint and fix on commit
    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")。