vue01----虚拟DOM、指令、事件修饰符、按键修饰符、双向数据绑定、v-if和v-show的区别

### 虚拟DOM:

    虚拟DOM就是内存中的一个变量,是一个对象结构

    前端效率优化:最致命的问题就是DOM操作,尽量减少DOM操作

    vue的高效:
        1、虚拟DOM页面渲染高效
        2、js   ①获取数据②根据数据渲染界面DOM操作 for
        vue将开发者的精力从DOM操作上转移到了数据操作上,数据变页面变
 
 为什么要使用虚拟DOM?
    每一次DOM的变动,浏览器就得重新渲染一次页面。为了提高页面的性能,就应该尽量减少DOM的变更次数。现代框架通常会用一个对象来保存目标DOM节点的标签名、属性、内容、子节点等信息,也就是用js的对象结构来表示DOM树的结构,这个js对象就是虚拟DOM。当状态变更的时候,js会先更新虚拟DOM,再通过diff算法比较虚拟DOM和真实DOM的差异,找出最少变更的方案,最后一并更新到真实DOM中。
 虚拟DOM最终也是操作真实DOM,为什么会更快?
    如果全称操作真实DOM的话,任何一个状态的变更,都会导致页面重排或重绘,这个环节就非常耗费性能了。采用虚拟DOM的话,就能避免这个问题。而且如果diff算法效率高的话,总是能采用最少的改动来更新DOM。总的来说,就是不会出现频繁的、大面积的DOM操作,从而提升了页面性能。

### 指令:

    内置指令

        v-if
        v-show

        v-on----事件绑定
            语法:  v-on:事件名称="事件函数"
                v-on:click="事件函数"
            简写:  @事件名称(需要传参时加(),不需要传参时不用加()。在事件函数中,用this可以访问到data中的数据:this.msg=1907)

        事件对象:($event)
            如果需要事件对象,只需要给函数传递一个$event。
            @click="clickHandler($event)"   将事件对象e传过去,默认参数是事件对象,不传参时,参数默认是e;如果有其他参数,需要通过$event手动传递。

        v-test
            值为data中的数据,null和undefined无法显示,可以用三元表达式进行判断
            1、解析data中的数据
            2、可以解析js的表达式
            底层原理:innerText
            简写:{{}}----插值法
        
        v-html
            值为data中的数据
            1、解析data中的数据
            2、可以解析js的表达式
            底层原理:innerHTML
            v-html和v-text是一样的,不同的是v-html可以解析html标签

        v-bind
            给元素绑定属性
            语法:v-bind:属性=属性值
            简写:  :属性=属性值
            v-bind绑定class:
                myClass:"box1 box2"
                myClass:["box1","box2"]
                myClass:{
                    box1:true,
                    box2:true
                }

        v-for
            用来遍历数组、对象、字符串、数字……
            如果报波浪线警告,加    :key="index"

        v-pre
            不解析{{}}

        v-cloak
            防止{{}}在vue.js没有加载进来的时候显示,需要写个样式:[v-clock]:{display:none;}

        v-once
            数据值解析一次



    自定义指令

        创建一个自动聚焦的自定义指令:
            Vue.directive("focus",{
                inserted(el){
                    el.focus()
                }
            })

### 事件修饰符:

    stop    阻止冒泡    @contextmenu.prevent=""----阻止右键默认事件
    self    只针对自己有效
    prevent     阻止浏览器默认事件
    enter   按下回车    @keydown.enter="downClick"----按下回车时触发事件
    once    事件只绑定一次      语法:指令.修饰符.修饰符
    capture     取消捕获

### 按键修饰符:(效率更高)

    enter   @keyup.enter----按下enter键抬起时触发
    esc     @keyup.esc----按下esc键抬起时触发
    left    @keyup.left----按下left键抬起时触发
    right   @keyup.right----按下right键抬起时触发
    up
    down
    tab
    delete
    space


### 双向数据绑定

    v-model----将表单元素的value和data数据绑定
 

### Q:

    1、v-if和v-show的区别:
        ①v-if底层是控制元素的创建和销毁,v-show是操作元素的display属性。v-if的开销要大一点,判断登录和未登录状态时用这个,但是它并未操作DOM,vue中都是操作的虚拟DOM。
        ②v-if配合v-else-if和v-else使用。
        场景:v-if  权限校验的时候
             v-show  展示页面,类似于一些选项卡


posted @ 2020-02-06 22:28  吴小明-  阅读(412)  评论(0编辑  收藏  举报