Vue-计算属性-过滤器-侦听器

本文详细介绍了Vue.js中v-for的更新监测,包括就地更新、虚拟DOM及其作用、key的作用以及动态class和style。接着讲解了过滤器的定义、使用、传参及多过滤器的应用。然后阐述了计算属性的概念、缓存特性和完整写法。最后,探讨了侦听器的功能,包括深度侦听和立即执行的用法。
摘要由CSDN通过智能技术生成

一.v-for更新监测:

目标: 当v-for遍历的目标结构改变, Vue触发v-for的更新

  • 这些方法会触发数组改变, v-for会监测到并更新页面
    • push()
    • pop()
    • shift()
    • unshift()
    • splice()
    • sort()
    • reverse()
  • 这些方法不会触发v-for更新
    • slice()
    • filter()
    • concat()

口诀:

  • 数组变更方法, 就会导致v-for更新, 页面更新
  • 数组非变更方法, 返回新数组, 就不会导致v-for更新, 可采用覆盖数组或this.$set()
<template>
  <div>
    <ul>
      <li v-for="(val, index) in arr" :key="index">
        {
  { val }}
      </li>
    </ul>
    <button @click="revBtn">数组翻转</button>
    <button @click="sliceBtn">截取前3个</button>
    <button @click="updateBtn">更新第一个元素值</button>
  </div>
</template>

<script>
export default {
  data(){
    return {
      arr: [5, 3, 9, 2, 1]
    }
  },
  methods: {
    revBtn(){
      // 1. 数组翻转可以让v-for更新
      this.arr.reverse()
    },
    sliceBtn(){
      // 2. 数组slice方法不会造成v-for更新
      // slice不会改变原始数组
      // this.arr.slice(0, 3)

      // 解决v-for更新 - 覆盖原始数组
      let newArr = this.arr.slice(0, 3)
      this.arr = newArr
    },
    updateBtn(){
      // 3. 更新某个值的时候, v-for是监测不到的
      // this.arr[0] = 1000;

      // 解决-this.$set()
      // 参数1: 更新目标结构
      // 参数2: 更新位置
      // 参数3: 更新值
      this.$set(this.arr, 0, 1000)
    }
  }
}
</script>

<style>

</style>

注意: vue不能监测到数组里赋值的动作而更新, 如果需要请使用Vue.set() 或者this.$set(), 或者覆盖整个数组

总结: 改变原数组的方法才能让v-for更新

1.v-for就地更新:

v-for 的默认行为会尝试原地修改元素而不是移动它们。

这种 虚拟DOM对比方式, 可以提高性能 - 但是还不够高

2.虚拟dom:

概念:本质是保存dom关键信息的JS对象

  • vue文件中的template里写的标签, 都是模板, 都要被vue处理虚拟DOM对象, 才会渲染显示真实DOM页面上
  1. 内存中生成一样的虚拟DOM结构(本质是个JS对象),因为真实的DOM属性好几百个, 没办法快速的知道哪个属性改变了,比如template里标签结构

    <template>
        <div id="box">
            <p class="my_p">123</p>
        </div>
    </template>
    

    对应的虚拟DOM结构

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值