关于Vue中的计算属性和监听属性详解

yizhihongxing

关于Vue中的计算属性和监听属性详解

Vue是一个非常流行的前端框架,在Vue的组件中,常常会有需要根据其他数据属性计算出新的属性值供模板渲染的情况。这时候就需要使用Vue提供的计算属性。此外,Vue还提供了监听属性,用于监听数据属性的变化。

计算属性

计算属性的本质就是一个函数,可以接受其他数据属性作为其参数,根据这些参数执行一定的计算逻辑,最终得出一个新的值。计算属性一般用于复杂的计算处理,比如格式化时间、对数组进行过滤等。

计算属性的定义采用computed关键字,在Vue的组件中,一般需要将计算属性定义在computed对象中,如下所示:

<template>
  <div>
    <p>{{message}}</p>
    <p>{{computedMessage}}</p>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        message: 'Hello World',
      };
    },
    computed: {
      computedMessage() {
        return this.message.split('').reverse().join('');
      },
    },
  };
</script>

上述代码中,定义了一个计算属性computedMessage,它依赖于数据属性message,并对message进行了反转的操作。在模板中渲染时,可以直接使用computedMessage属性。

需要注意的是,计算属性是基于它的依赖缓存的。也就是说,只要计算属性所依赖的数据属性没有发生变化,该计算属性就不会重新计算。这也是计算属性比较高效的一点。

监听属性

监听属性用于监听数据属性的变化,并在变化时执行一些特定的逻辑,比如ajax请求等。使用watch关键字可以定义一个监听属性。在Vue的组件中,一般需要将监听属性定义在watch对象中,如下所示:

<template>
  <div>
    <p>{{message}}</p>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        message: 'Hello World',
        newMessage: '',
      };
    },
    watch: {
      message(newValue, oldValue) {
        console.log('message has been changed', newValue, oldValue);
        this.newMessage = 'new message is: ' + newValue;
      },
    },
  };
</script>

上述代码中,使用watch定义了一个监听属性message。在message属性发生变化时,会触发watch中定义的回调函数,并传入该属性的新旧值。

需要注意的是,监听属性的回调函数中可以访问到实例上下文this,并可以修改实例上的其他数据属性。同时,需要注意在回调函数中避免无限递归的情况。

示例说明

计算属性

在一个列表页面中,需要对分类进行过滤。可以定义一个计算属性,对原始数据进行过滤,并将过滤后的列表返回给模板进行渲染。

<template>
  <div>
    <ul>
      <li v-for="item in filteredList">{{item.name}}</li>
    </ul>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        list: [
          {name: 'Apple', category: 'fruit'},
          {name: 'Banana', category: 'fruit'},
          {name: 'Carrot', category: 'vegetable'},
        ],
        filterCategory: 'fruit',
      };
    },
    computed: {
      filteredList() {
        return this.list.filter(item => item.category === this.filterCategory);
      },
    },
  };
</script>

上述代码中,定义了一个list数组,其中包含了水果和蔬菜两种类别的物品,还定义了一个filterCategory数据属性表示当前选中的分类。在模板中,使用计算属性filteredListlist数组进行过滤,并返回过滤后的物品列表。这样,在切换分类时,页面中会自动更新渲染。

监听属性

在一个编辑页面中,需要在表单提交前校验表单数据是否合法。可以定义一个监听属性,监听表单中某些数据属性的变化,并执行校验逻辑。

<template>
  <div>
    <form @submit.prevent="handleSubmit">
      <input v-model="name" type="text" placeholder="name">
      <input v-model="mobile" type="text" placeholder="mobile">
      <input v-model="email" type="text" placeholder="email">
      <button type="submit">submit</button>
    </form>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        name: '',
        mobile: '',
        email: '',
      };
    },
    watch: {
      name() {
        this.validateForm();
      },
      mobile() {
        this.validateForm();
      },
      email() {
        this.validateForm();
      },
    },
    methods: {
      handleSubmit() {
        // submit form data
      },
      validateForm() {
        // validate form data, e.g. check if name, mobile and email are not null
      },
    },
  };
</script>

上述代码中,定义了一个表单,包含name、mobile和email这三个数据属性。同时,定义了一个监听属性,用于监听表单中这三个数据属性的变化,并执行回调函数validateForm()进行表单校验。在表单提交时,会触发handleSubmit()函数。

这样,在用户修改表单中数据属性时,监听属性会自动检测并执行回调函数,帮助用户在表单提交前快速发现表单数据是否正确。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:关于Vue中的计算属性和监听属性详解 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • vue axios post发送复杂对象问题

    当使用 Vue.js 结合 axios 提交一个复杂对象时,我们可能会遇到一个问题,即该请求传输时无法正确解析该对象。这可能是因为该对象被序列化成了字符串,导致后端无法正确解析该请求。下面将详细介绍如何解决这一问题。 问题原因 axios 内部使用了 JSON.stringify 将该对象进行序列化,并将其存储在请求正文中。这样,后端无法正确解析该请求。 解…

    Vue 2023年5月28日
    00
  • 基于Vue生产环境部署详解

    基于Vue生产环境部署详解 在将Vue应用从开发环境部署到生产环境时,需要经过一系列的步骤。下面是一个基于Vue的生产环境部署详解。 步骤一:将应用打包 要将Vue应用转换为生产环境,需要先通过Webpack将其打包成一个静态文件。首先,安装以下依赖库: npm install webpack webpack-cli –save-dev 创建一个Webpa…

    Vue 2023年5月27日
    00
  • 在vue项目中,将juery设置为全局变量的方法

    在Vue项目中,使用jQuery需要将其设置为全局变量,下面是完整的攻略: 安装jQuery 首先,需要在项目中安装jQuery,可以使用npm或yarn进行安装。这里以npm为例: npm install jquery –save-dev 引入jQuery并设置为全局变量 在Vue项目的入口文件中(一般是main.js),需要引入jQuery并将其设置为…

    Vue 2023年5月28日
    00
  • Vue中对数组和对象进行遍历和修改方式

    那么我们来详细讲解一下Vue中对数组和对象进行遍历和修改的方式。 对象的遍历和修改 首先,我们来看一下如何遍历一个对象。Vue提供了一个专门用于对象遍历的指令v-for,通过它可以方便地遍历对象的每一个属性。 <template> <div> <ul> <li v-for="(value, key) in …

    Vue 2023年5月27日
    00
  • vue props type设置多个类型

    Vue的props允许我们设置属性的类型,并且支持一次设置多个类型。下面是设置vue props多个类型的攻略和示例: 设置多个类型 在设置属性类型时,我们可以将其设置为多个类型,可选的类型有:String、Number、Boolean、Array、Object、Date、Function、Symbol、以及自定义构造函数等。可以通过Vue提供的Array类…

    Vue 2023年5月27日
    00
  • 11行JS代码制作二维码生成功能

    当我们想要在网页上制作二维码时,可以使用JavaScript编写11行代码来实现,下面是详细步骤: 1. 引入Qrcode.js库 我们需要使用Qrcode.js库来生成二维码,因此首先需要将该库引入网页中。 <script src="https://cdn.bootcdn.net/ajax/libs/qrcodejs/1.0.0/qrcod…

    Vue 2023年5月27日
    00
  • vue.js实现开关(switch)组件实例代码

    我很乐意为您提供“Vue.js实现开关(switch)组件实例代码”的攻略。具体步骤如下: 1. 组件的结构设计 在实现开关组件的过程中,需要考虑它的结构设计。对于一个简单的开关组件而言,我们可以考虑采用以下的HTML结构: <div class="switch"> <input id="toggle&quot…

    Vue 2023年5月28日
    00
  • vue 使用vue-i18n做全局中英文切换的方法

    下面我就来详细讲解“vue 使用vue-i18n做全局中英文切换的方法”的完整攻略。 1. 准备工作 首先,需要在Vue项目中安装vue-i18n模块,可以通过npm命令行工具来安装。在终端中输入以下命令: npm install vue-i18n –save 安装成功后,将在项目的node_modules文件夹中看到vue-i18n的相关文件。 2. 配…

    Vue 2023年5月29日
    00
合作推广
合作推广
分享本页
返回顶部