vue 细节常记以及一些坑

如果一个功能,用这三者都可以实现功能的话:

1、优先考虑computed实现,因为性能更好,有缓存,当data中不相关的数据改变,computed里的方法不会触发计算,computed好用,简单展示丢给它一劳永逸。

2、复杂关联比较多的属性用watch,更加方便,computed和watch两种互补。

3、methods性能最低,因为当data其它不相干的数据改变时,它也会执行里面的方法,而且插值表达式还需要加个()才能执行里面的方法,而且需要主动触发才能执行


指令 v-if 会从页面删除div内容,操作dom 

v-show 只是display:none ,div还是存在页面的,性能比较好


vue 中 如果要通过数组响应改变数据,必须用指定几个方法才能生效:

push(最后面增加) pop(最后一项删除) shift(数组第一项删除) unshift(数组第一项增加内容)

splice(数组截取) sort(排序) reverse(反转) 还有一种就是改变数组引用直接赋值 arr = XXX

如果是改变其中一个arr[0] =XX 这样的话,数据是改变但是响应的dom是不会变化的

或者用vue set方法也可以改变vm.$set(vm.arr,2(下标),value)


vue 中 如果要通过对象响应改变数据,则就可以通过修改obj.xx = yy 这样改变了数据,dom也会跟着变化

但是数组这样却不行的,必须用上面七个方法或者改变引用。如果要往对象里面增加一项内容,必须

改变引用增加,比如obj = {} 这样才能响应dom ,或者通过vue的set方法改变,比如Vue.set(app.obj,key,value)。而obj.new = xxx 这个new是新的属性,这种增加数据方式不会响应到dom。


开发过程中定义组件小bug


正常渲染table组件会出现tr脱离了table中如下图所示:


解决问题如下:


因为table里面必须要求tr 所以,组件必须用tr 里面价格vue is 的方法即可

同理:ul 或者ol 里面必须是li标签 加个is属性即可,select 里面必须是option 这个加个is渲染组件就行,也符合w3c标准 


父组件通过props传递给子组件的时候,子组件拿到如果需求要修改的时候,不能直接改变这个数据,因为怕的地方引用这个数据,一改其它地方也改了,造成其它地方bug,正确的做法是,子组件定义一个data的属性去接受这个数据,然后子组件再改变这个data属性值(克隆副本)即可


v-once 指令在组件切换的时候能有效提高性能,会保存在内存中,减少操作




  1. slice  :

    定义:接收一个或两个参数,它可以创建一个由当前数组中的一项或多项组成的新数组,注意是新数组哦~ 也就是说它不会修改原来数组的值。 

     用法:slice( para1 ),会截取从para1开始的到原数组最后的部分;

        slice(para1,para2)会截取原数组的从para1开始的para2-para1个数组。 

     注意:当两个参数中存在负数时,用原数组的长度加上两个负数的参数作为相应的参数来计算。

 

  2.  splice  :

       定义:强大的数组操作方法

用法 : splice( para1,para2 ) : 删除数组中任意数量的项,从para1开始的para2项。注意的是用splice删除数组中的值会直接将某几项从数组中完全删除,会导致数组length值的改变,这与delete的删除置为undefined是不一样的。

 splice( para1,para2,val1,val2… ):项数组中添加和删除项,para1表示可以添加的项数,para2表示删除的项数,后面的变量表示要添加的项的值,注 意是从para1之后开始删除和添加的。

    注意 : 参数为负数的问题,如果para1为负数,则会加上数组的长度作为para1的值,而para2为负数或0的话不会执行删除操作。

 

  3.split : 根据特定的字符切割字符串并且返回生成的数组。

                   例如 : str = “s-aaa-sss-eee-www”;

                            targetArr = str.slite(“-”);    //[‘s’,’aaa’,’sss’,’eee’,’www’]

 


猜你喜欢

转载自blog.csdn.net/qq_36416878/article/details/80203985
今日推荐