vue基础知识

139 阅读2分钟

小知识

多数被vue管理的函数用普通函数

多数不被vue管理的函数最好用箭头函数

v-if 多和template使用

收集表单数据

 收集表单数据:
 若:<input type="text">,则v-model手机的时value值,用户输入的就是value的值
 若:<input type="radio">,则v-model收集的是value,且要给标签配置value值
 若:<input type="checkbox">
      1.没有配置input的value属性,那么手机的就是checked(勾选or 未勾选,是布尔值)
      2.配置input的value属性:
          (1)v-model的初始值是非数组,那么手机的就是checked(勾选 or 不勾选,是布尔值)
          (2)v-model的初始值是数组,那么手机的就是value组成的数组
      备注:v-model的三个修饰符:
      lazy:失去焦点在收集数据
      number:输入字符串转为有效的数组
      trim:输入首尾空格过滤
      

vue监测数据改变的原理

1.vue会监视data中所有层次的数据
2.如何检测对象中的数据?
通过setter实现监视,且要在new Vue时就传入要监测的数据.
  (1).对象中后追加的属性,Vue默认不做响应式处理
  (2).如需给后添加的属性做响应式,请使用如下API:
    Vue.set(target,propertyName/index,value)
    vm.$set(target,propertyName/index,value)

    3.如何监测数组中的数据?
      通过包裹数组更新元素的方法实现,本质就是做了两件事:
        (1).调用元素怒哼对应的方法对数组进行更新
        (2).重新解析模板,进行页面渲染.

    4.在Vue修改数组中的某个元素一定要用如下方法:
      (1)使用这些API:push() pop() shift() unshift() reverse() splice() sort()
      (2)Vue.set()或 vm.$set()
      特别注意:Vue.set() 和vm.$set()  不能给vm或者vm的根数据对象添加属性!!!
      

模拟数据检测原理

let data = {
      name: 'xxxx',
      address: '武汉'
    }
    
    // 创建一个监视的实例对象,用于检测data中属性的变化
    const obs = new Observer(data)
    console.log(obs)
   

    //声明一个vm实例对象
    let vm = {}
    vm._data = data = obs

    function Observer(obj) {
      const keys = Object.keys(obj)
      keys.forEach(k => {
        Object.defineProperty(this, k, {
          get() {
            return obj[k]
          },
          set(val) {
            console.log(`${k}被改了,我要去解析模板,生成虚拟DOM...我要开始忙了`);
            obj[k] = val
          }
        })
      })
    }

列表渲染

v-for(遍历对象 遍历数组 遍历字符串 遍历指定次数)

1.我们可以用 v-for 指令基于一个数组来渲染一个列表。v-for 指令需要使用 item in items 形式的特殊语法,其中 items 是源数据数组,而 item 则是被迭代的数组元素的别名。

<li v-for="item in items" :key="item.message">

2.你也可以用 of 替代 in 作为分隔符,因为它更接近 JavaScript 迭代器的语法:

<div v-for="item of items"></div>

为了给 Vue 一个提示,以便它能跟踪每个节点的身份,从而重用和重新排序现有元素,你需要为每项提供一个唯一 key attribute:

<div v-for="item in items" v-bind:key="item.id"></div>