Vue2 基础

90 阅读3分钟

Vue基本用法

理论

MVVM

    1. 发展史以及旁支

a. 语义化模版

b. MVC - model view controller

c. MVVM - Model-View-ViewModel

1. 数据会绑定在ViewModel层并且自动将数据渲染到页面中
2. 视图发生变化时,会通知viewModel层更新数据

写法

vue如果利用mvvm思想进行项目开发

数据双向绑定 a. 利用花括号,构筑了数据与视图的双向绑定

//计算类型
//1.绑定数据的计算
<div>{{ number + 1 }}</div>
//2.截断
<div>{{ str.slice(0,-1) }}</div>
//3.浮点数
<div>{{ number.toFixed(2)}}</div>
//4.转整型
<div>{{ parseInt(number,10)}}</div>
……
//加工类型
// 5.函数加工
<div>{{ calNumber(number) }}</div>

//条件类型
//6.三元运算
<div>{{ a>b? '对':'错' }}</div>

// 7.逻辑运算
<div>{{ a>b&&c>d }}</div>

//8.取反
<div>{{ !flag }}</div>
//9.变量判断
<div>{{ a>b? '对':'错' }}</div>

b. 通过视图绑定事件来处理数据

<div @click='number++'>{{ number }}</div>

生命周期

beforeCreate: new Vue() - 空实例 实例挂载功能

created: data、props、method 、computed -可以操作数据、但是不能涉及vdom和dom

beforeMount:生成vDom - 可以操作数据,但是不能操作dom

mounted:Dom - 可以做任何操作

beforeUpdate:vDom已经更新,但是Dom还没更新是旧的。- 可以更新数据

updated:dom已经更新 - 需要谨慎操作数据,有可能会导致死循环

beforeDestory:实例vm尚未被销毁 - 清空实例下导致内存泄漏的东西 - eventBus、reset、store、clear计时器

destoryed: 实例已经被销毁 - 结束

image.png

定向监听

computed 和 watch 相同点:

  1. 基于vue的依赖收集机制
  2. 都是被依赖的变化触发进行改变进而进行处理计算

不同点:

  1. 入和出 computed :多入单出 - 多个值变化自称一个值的变化 watch : 单入多出 - 单个值的变化进而影响一系列的状态变更
  2. 性能: computed:会自动diff依赖,若依赖没有变化会从缓存中读取当前计算值 watch: 无论舰艇值变化与否都会执行回调
  3. 写法上: computed :必须有return watch :不一定
  4. 时机上: computed : 从首次生成复制就开始计算运行了 watch :首次不会运行,除非 - immediate:true

条件

v-if & v-show & v-else & v-else-if

v-if 不符合条件时无dom,不会渲染实际节点及其子节点 v-show 存在实际节点及其子节点,但不展示,不占据位置

循环

v-for 和 v-if 优先级

v-for > v-if 先循环再判断

key的作用
  1. 模版的编译原理 - template => dom

    template => 正则匹配语法 - 生成AST:静态 + 动态变量 =>转换AST为可执行方法 => render() => dom

  2. dom diff

1 2 3 4 5 6

6 5 7 3 2 1 层级:只考虑单层复用,多层级遍历实现 顺序:双向指针,首位向中间移动 替换:移动、新增、删除;优先复用 - key => 快速识别顺序

  1. key作用 - 尽可能复用节点 index 作为key 或者随机数作为key 不合适

指令

默认指令
  • v-once - 只执行一次
  • v-text - 渲染字符串
  • v-html - 渲染html
  • v-bind - : 绑定赋值
  • v-on - @ 监听
  • v-model - 双向绑定 - 语法糖(:value + @input)属性下传+事件上抛
    • 重配置
        model:{
            prop: 'selected',
            event: 'change'
        }
    
自定义指令
    directive:{
        myxxx:{
            update:function(){
                ……
            }
        }
    }
    <div v-myxxx></div>

事件

v-on
修饰符
  • .stop 阻止传播
  • .prevent 阻止默认事件执行
  • .capture 捕获
  • .self event target是自身执行
  • .once 只执行一次
  • .passive 不触发prevent事件
按钮修饰符

enter delete

事件设计 - 为何vue把事件写在模版上,而不是js中

模版定位事件触发源 + 触发源寻找触发事件逻辑 - 更方便定位问题

js与事件本身解耦 - 更便于测试隔离

viewModel销毁,自动解绑事件 - 更便于回收

组件化

一般组件和动态组件

    //一般组件
    <Comp1></Comp1>
    //动态组件
    <component :is='currentComponent'></component>