计算属性和监听器

这篇具有很好参考价值的文章主要介绍了计算属性和监听器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 计算属性的定义

计算属性是Vue中非常常用的一个概念,它能够根据现有的数据直接生成一个新的数据进行展示和操作。在Vue的实例中,可以使用computed来定义计算属性。

例如,我们有一个Vue实例vm,其中有一个数据message,我们可以通过计算属性reversedMessage来生成消息的反转字符串:

var vm = new Vue({
  data: {
    message: 'Hello Vue.js'
  },
  computed: {
    reversedMessage: function () {
      return this.message.split('').reverse().join('');
    }
  }
});

在上述代码中,我们定义了一个计算属性reversedMessage,它会根据message数据进行计算生成新的数据。在模板中,我们可以通过使用reversedMessage来展示反转后的消息:

<div>{{ reversedMessage }}</div>

2. 计算属性的缓存

我们在定义计算属性时,可以通过设置computedcached属性来开启计算属性的缓存机制。默认情况下,计算属性的缓存是开启的,这意味着无论调用多少次计算属性,只要依赖的数据没有发生变化,计算属性的值就会被缓存起来,不会重复计算。

例如,我们有一个Vue实例vm,其中有一个数据firstNamelastName,我们可以通过计算属性fullName来生成完整的名字:

var vm = new Vue({
  data: {
    firstName: 'John',
    lastName: 'Doe'
  },
  computed: {
    fullName: {
      get: function () {
        return this.firstName + ' ' + this.lastName;
      },
      set: function (value) {
        var names = value.split(' ');
        this.firstName = names[0];
        this.lastName = names[names.length - 1];
      }
    }
  }
});

在上述代码中,我们定义了一个计算属性fullName,它会根据firstNamelastName数据进行计算生成新的完整名字。在模板中,我们可以通过使用fullName来展示完整的名字:

<div>{{ fullName }}</div>

如果我们在模板中修改了fullName的值,Vue会自动调用计算属性的set方法来更新firstNamelastName的值。

3. v-for和v-if一起使用的替代方案

在Vue中,当需要在模板中使用v-for和v-if一起时,官方并不推荐这样的写法。因为这样会导致每次渲染都会重新计算v-if的结果,影响性能。

替代的方案是使用计算属性来生成一个过滤后的数组,然后再使用v-for来进行循环渲染。

例如,我们有一个Vue实例vm,其中有一个数据itemsisShow,我们希望只在isShow为true的情况下进行v-for的循环渲染:

var vm = new Vue({
  data: {
    items: [1, 2, 3, 4, 5],
    isShow: true
  },
  computed: {
    filteredItems: function () {
      if (this.isShow) {
        return this.items;
      } else {
        return [];
      }
    }
  }
});

在上述代码中,我们定义了一个计算属性filteredItems,它会根据isShow的值来过滤items数组。然后在模板中,我们可以通过循环渲染filteredItems来展示过滤后的数组:

<ul>
  <li v-for="item in filteredItems">{{ item }}</li>
</ul>

4. 实例:购物车的实现

在Vue中,我们可以使用计算属性来实现购物车的功能。

例如,我们有一个Vue实例vm,其中有一个数据cart,它是一个数组,存储商品的信息。每个商品包括namepricequantity

var vm = new Vue({
  data: {
    cart: [
      { name: 'Item 1', price: 10, quantity: 1 },
      { name: 'Item 2', price: 20, quantity: 2 },
      { name: 'Item 3', price: 30, quantity: 3 }
    ]
  },
  computed: {
    total: function () {
      var sum = 0;
      for (var i = 0; i < this.cart.length; i++) {
        sum += this.cart[i].price * this.cart[i].quantity;
      }
      return sum;
    }
  }
});

在上述代码中,我们定义了一个计算属性total,它会根据购物车中每个商品的价格和数量计算出总价。在模板中,我们可以直接使用total来展示购物车的总价:

<div>Total: {{ total }}</div>

这样,每次购物车的商品发生变化时,总价都会动态地重新计算和更新。

5. 小结

计算属性的使用可以简化在模板中进行复杂逻辑运算的过程,同时也有性能上的优化。在需要对循环和条件进行处理的情况下,计算属性提供了一种替代方案。通过计算属性可以提高代码的可读性,并减少模板中的JavaScript代码的使用。
Vue学习笔记

1. 使用监听器

在Vue中,我们可以使用监听器来监测数据的变化,并在数据发生变化时执行相应的操作。通过watch选项或watch方法,我们可以定义一个或多个监听器。

例如,我们有一个Vue实例vm,其中有一个数据message,我们可以通过监听器watch来监测message的变化,并在变化时输出新的消息:

var vm = new Vue({
  data: {
    message: 'Hello Vue.js'
  },
  watch: {
    message: function (newVal, oldVal) {
      console.log('消息发生变化,新消息为', newVal);
    }
  }
});

在上述代码中,我们通过watch选项定义了一个监听器,它会监测message的变化,当message发生变化时,会执行相应的回调函数,并将新的值和旧的值作为参数传入。

2 监听器的更多形式

除了使用watch选项来定义监听器外,我们还可以使用$watch方法来动态地添加监听器。

例如,我们有一个Vue实例vm,其中有一个数据price,我们可以使用$watch方法来监测price的变化,并在变化时输出新的价格:

var vm = new Vue({
  data: {
    price: 100
  },
  methods: {
    updatePrice: function () {
      this.price += 10;
    }
  }
});

vm.$watch('price', function (newVal, oldVal) {
  console.log('价格发生变化,新价格为', newVal);
});

在上述代码中,我们使用$watch方法动态地添加一个监听器,它会监测price的变化,当price发生变化时,会执行相应的回调函数,并将新的值和旧的值作为参数传入。

3 实例方法 Swatch

在Vue中,除了使用watch选项或$watch方法来定义监听器以外,还可以使用实例方法$watch来添加监听器。

例如,我们有一个Vue实例vm,其中有一个数据color,我们可以使用$watch方法来监测color的变化,并在变化时输出新的颜色:

var vm = new Vue({
  data: {
    color: 'red'
  },
  methods: {
    changeColor: function () {
      this.color = 'blue';
    }
  }
});

vm.$watch('color', function (newVal, oldVal) {
  console.log('颜色发生变化,新颜色为', newVal);
});

在上述代码中,我们使用实例方法$watch动态地添加一个监听器,它会监测color的变化,当color发生变化时,会执行相应的回调函数,并将新的值和旧的值作为参数传入。

4 小结

在本节中,我们学习了如何使用监听器来监测数据的变化,并在变化时执行相应的操作。我们介绍了使用watch选项、watch方法和实例方法$watch来定义和添加监听器的不同方式。文章来源地址https://www.toymoban.com/news/detail-607822.html

到了这里,关于计算属性和监听器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue3前端开发,watch侦听器的深度监听和精确监听

    Vue3前端开发,watch侦听器的深度监听和精确监听!今天和大家分享的内容是,关于watch的深度侦听和精确监听。 首先看一下,第一个案例,练习的是,深度监听的效果。默认是浅的侦听,是不会触发回调函数的。 如图,当我们点击按钮,修改num值的时候,触发了回调函数,在

    2024年01月23日
    浏览(30)
  • javascript 删除所有事件监听器

    本篇文章将介绍如何删除 JavaScript 中的所有事件侦听器。 EventTarget 接口的 addEventListener() 方法配置一个函数,只要指定的事件被传递到目标,就会调用该函数。 addEventListener() 方法的工作原理是将实现 EventListener 的函数或对象添加到事件侦听器列表中,以用于在调用它的 Eve

    2024年02月16日
    浏览(34)
  • Vue3监听器使用

    watch(监听的对象或值, 回调函数(参数新值,旧值), 配置项是对象={   immediate: true//立即监听--进入就会执行一次 deep:true //深度监听 }) 首先引入 设置响应式数据 设置点击事件,点击触发修改num 监听简单数据类型----- immediate: true//立即监听--进入就会执行一次 ---------------

    2024年02月07日
    浏览(31)
  • 微信小程序——自定义组件组件的创建和引用,修改组件的样式隔离选项,stylesolation的可选值,properties属性,data数据,methods方法,数据监听器,用法,监听对象属性的变化

    ①在项目的根目录中,鼠标右键,创建 components - test 文件夹 ②在新建的 components - test 文件夹上,鼠标右键,点击\\\"新建 Component \\\" ③键入组件的名称之后回车,会自动生成组件对应的4个文件,后缀名分别为 js , json ,. wxml 和. wxss 注意,为了保证目录结构的清晰,建议把不同的

    2024年02月15日
    浏览(48)
  • Vue3 —— watch 监听器及源码学习

    该文章是在学习 小满vue3 课程的随堂记录 示例均采用 script setup ,且包含 typescript 的基础用法 在 vue3 中,必须是 ref 、 reactive 包裹起来的数据,才可以被 watch 监听到 1、语法: watch(source, cb, options) source 是监听的目标,有 4 种书写形式: reactive 形式的响应式数据 ref 形式的响

    2024年02月12日
    浏览(26)
  • Vue3.0 watch和watchEffect监听器:VCA

    在项目中,有时候检测一个变量的值是否反升了变化。通常使用的watch或者使用低效的循环判断。 在次vue中给我们设置了深度监测数据繁盛变化的方法。 1.vue中提供了在watch监听时设置deep:true 就可以实现对对象的深度监听; 2.immediate:true,代表watch里面声明了之后会立马执行han

    2024年02月06日
    浏览(35)
  • 【Vue2.x源码系列07】监听器watch原理

    上一章 Vue2计算属性原理,我们介绍了计算属性是如何实现的?计算属性缓存原理?以及洋葱模型是如何应用的? 本章目标 监听器是如何实现的? 监听器选项 - immediate、deep 内部实现 在 Vue初始化实例的过程中,如果用户 options选项中存在侦听器,则初始化侦听器 watch 类型:

    2023年04月20日
    浏览(42)
  • JavaWEB学习笔记(二)------HTTP、Servlet、会话、过滤器、监听器、Ajax、前端工程化

    目录 HTTP HTTP1.1 请求和响应的报文格式 请求报文 响应报文 常见状态响应码 Servlet  静态资源和动态资源 ​编辑  Servlet简介  Servlet开发流程 导入和响应头问题 url-pattern不同写法 url-pattern工作方式 Servlet注解方式配置 Servlet生命周期  Servlet继承结构 Servlet接口 GenerisServlet类 Ht

    2024年01月21日
    浏览(32)
  • HttpSessionListener监听器和HttpSessionAttributeListener监听器

    1.作用:监听Session创建或销毁,即生命周期监听 2.相关方法: 3.使用场景: 和前面的ServletContextListener等一样,可以用于监控用户上线和离线 4.代码 HttpSessionListener监听器 实现类 HttpSessionAttributeListener监听器 1.作用:监听Session属性的变化,使用少 2.相关方法: 3.代码 监听器 实

    2024年02月04日
    浏览(38)
  • Listener监听器----HttpServletRequest对象的生命周期监听器

    一、HttpServletRequest对象的生命周期监听器         ServletRequestListener接口定义了ServletRequest(是HttpServletRequest接口的父接口类型)对象生命周期的监听行为。 void requestInitialized(ServletRequestEvent sre)         HttpServletRequest对象创建后会触发该监听器方法,并将已创建HttpServletR

    2024年01月23日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包