加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Vue侦听属性

发布时间:2023-04-18 15:02:39 所属栏目:教程 来源:
导读:Vue 提供了一种更通用的方式来观察和响应 Vue 实例上的数据变动:侦听属性。

侦听器 watch 是 Vue 提供的一种用来观察和响应 Vue 实例上的数据变化的属性。当被侦听的数据发生变化时,会触发对应的侦听函数。
Vue 提供了一种更通用的方式来观察和响应 Vue 实例上的数据变动:侦听属性。

侦听器 watch 是 Vue 提供的一种用来观察和响应 Vue 实例上的数据变化的属性。当被侦听的数据发生变化时,会触发对应的侦听函数。

使用侦听器

前面我们介绍了什么是侦听器 watch,那么如何定义一个侦听器呢?

侦听器 watch 实际是 vue 实例上的一个对象属性。当我们需要对 vue 实例上某个属性进行侦听时,我们以需要被侦听的属性名作为 watch 对象的键,以一个函数 function 作为该键的值。函数 function 接收两个参数:侦听数据变化之后的值newValue;侦听数据变化之前的值oldValue:

var vm = new Vue({
  el: '#app',
  data() {
    return {
      count: 
    }
  },
  watch: {
    count: function(newVal, oldVal) {
      // 具体处理逻辑
    },
  }
})
代码解释:
第 5 行,我们在 data 中定义了 Number 类型的数据 count。
第 8-12 行,我们在侦听属性 watch 中定义了侦听器 count。

在介绍完如何定义一个侦听器之后,让我们用几个实例来学习一下如何在项目中使用侦听器。

对字符串、布尔值、数字、数组类型的监听

假设当前项目中有以下需求,用户的购买商品页面:

当用户每次修改要购买商品名称的时候,都需要清空购买数量。
用户添加的数量在必须大于 0,并且当首次出现数量大于 10 的时候弹出数量超额提示,下次超过不再提示。
购物车数量发生变化时提示用户。
在我们写具体的代码逻辑之前,让我们先来分析一下如何使用侦听器watch来实现需求功能:

对于需求 1, 我们需要对商品名称进行侦听,当它改变的时候将数量清零。
对于需求 2, 我们需要对商品数量进行侦听,当商品数量首次超过 10 的时候,弹出对应提示;当商品数量小于 0 的时候,将数量改为 0。
对于需求 3, 对购物车数据进行侦听,每次操作购物车数据时提示用户。
具体实现如下:
<!DOCTYPE html>
  <html lang="en" style="background-color: #ccc;">
  <head>
    <Meta charset="UTF-8">
    <Meta name="viewport" content="width=device-width, initial-scale=1.0">
    <Meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
  </head>
  <body style="background-color: #ccc;">
    <div id="app">
      <div>商品名称:<input v-model="name"/></div>
      <button v-on:click="cut">减一个</button>
        购买数量{{count}}
      <button v-on:click="add">加一个</button>
      <button v-on:click="addCart">加入购物车</button>
      <div v-for="(item, index) in list" :key="index">
        {{item.name}}  x{{item.count}}
      </div>
    </div>
  </body>
  <script src="https://unpkg.com/vue/dist/vue.js"></script>
  <script type="text/javascript">
    var vm = new Vue({
      el: '#app',
      data: {
        name: '',
        count:,
        isMax: false,
        list: []
      },
      methods: {
        cut() {
          this.count = this.count - 
          this.isMax = false
        },
        add() {
          this.count = this.count + 
        },
        addCart() {
          this.list.push({
            name: this.name,
            count: this.count
          })
        }
      },
      watch: {
        count: function(newVal, oldVal) {
          if(newVal > ) {
            this.isMax = true
          }
          if(newVal < ) {
            this.count = 
          }
        },
        name: function() {
          this.count = 
          this.isMax = false
        },
        isMax: function(newVal) {
          if (newVal) {
            console.log('注意:您购买的数量较大,请确认是否操作有误')
          }
        },
        list() {
          console.log('购物车数据发生改变')
        }
      }
    })
  </script>
</html>
代码解释:
在 html 代码中, 我们给出一个商品名称输入框以及添加数量和减少数量的两个按钮。

代码第 4-9 行,我们定义了四个数据,分别是:
name — 商品的名称
count — 商品的数量
isMax — 是否首次超过数量 10
list — 购物车列表

代码第 10-24 行,我们定义了三个方法,分别是:
cut — 将数量 count - 1
add — 将数量 count + 1
addCart — 修改购物车数据

代码第 25-49 行,我们定义了四个侦听器,分别是:
name — 对数据 name 侦听,触发时将 count 变成 0;并 将 isMax 变成 false
count — 对数据 count侦听, 检测到 count 大于 10 时,将 isMax 变成 true,检测到 count 小于 0 的时候将 count 修改为 0。
isMax — 对数据 isMax 侦听,触发时,判断变化后的值是否为 true,当值为 true 时弹出提示消息
list — 对数据 list 侦听,每次改变时弹出提示消息。

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章