vue属性计算和监听

1、计算属性

计算属性是属性之间的关系,例如性是一个属性,名是一个属性,姓名也是一个属性,姓名就是与性和名组成的
通过computed属性定义函数,将拼接的结果返回

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>03_计算属性和监视</title>
</head>
<body>
<div id="demo">: <input type="text" placeholder="First Name" v-model="firstName"><br>: <input type="text" placeholder="Last Name" v-model="lastName"><br>
  <!--fullName是根据fistName和lastName计算产生-->
  姓名(单向): <input type="text" placeholder="Full Name" v-model="fullName"><br>

</div>

<script type="text/javascript" src="../js/vue.js"></script>
<script type="text/javascript">
  const vm = new Vue({
    el: '#demo',
    data: {
      firstName: 'A',
      lastName: 'B',
       fullName2: 'A-B'
    },

    // 计算属性配置: 值为对象
    computed: {
      fullName() { // 属性的get()
        return this.firstName + '-' + this.lastName
      }
    }
  });
</script>
</body>
</html>

2、监听属性

属性监听有两种方法
第一种方法:在watch监听属性,当属性改变时触发,例如果名改变,姓名就改变,姓改变,姓名也会改变。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>计算属性和监视</title>
</head>
<body>

<div id="demo">: <input type="text" placeholder="First Name" v-model="firstName"><br>: <input type="text" placeholder="Last Name" v-model="lastName"><br>
  <!--fullName是根据fistName和lastName计算产生-->
  姓名(单向): <input type="text" placeholder="Full Name" v-model="fullName"><br>

</div>

<script type="text/javascript" src="../js/vue.js"></script>
<script type="text/javascript">
  const vm = new Vue({
    el: '#demo',
    data: {
      firstName: '李',
      lastName: '力',
      fullName: '李 力'
    },
    watch: {
      firstName: function (value) {
        this.fullName = value + ' ' + this.lastName
      },
      lastName: function (value) {
        this.fullName = this.firstName + ' ' + value
      }
    }
  })
</script>
</body>
</html>

第二种方法:通过vm.$watch传递属性值和匿名函数实现监听

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>计算属性和监视</title>
</head>
<body>

<div id="demo">: <input type="text" placeholder="First Name" v-model="firstName"><br>: <input type="text" placeholder="Last Name" v-model="lastName"><br>
  <!--fullName是根据fistName和lastName计算产生-->
  姓名(单向): <input type="text" placeholder="Full Name" v-model="fullName"><br>

</div>

<script type="text/javascript" src="../js/vue.js"></script>
<script type="text/javascript">
  const vm = new Vue({
    el: '#demo',
    data: {
      firstName: '李',
      lastName: '力',
      fullName: '李 力'
    }
  })
  vm.$watch('firstName',function (value) {
    this.fullName = value + ' ' + this.lastName
  })
  vm.$watch('lastName',function (value) {
    this.fullName = this.firstName + ' ' + value
  })

</script>
</body>
</html>

3、计算属性高级

通过setter/getter实现对属性的显示和监听,计算属性存在缓存,多次读取只执行依次getter计算。可以实现双向监听

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>03_计算属性和监视</title>
</head>
<body>

<div id="demo">: <input type="text" placeholder="First Name" v-model="firstName"><br>: <input type="text" placeholder="Last Name" v-model="lastName"><br>
    <!--fullName是根据fistName和lastName计算产生-->
    姓名(双向): <input type="text" placeholder="Full Name1" v-model="fullName"><br>

</div>

<script type="text/javascript" src="../js/vue.js"></script>
<script type="text/javascript">
    const vm = new Vue({
        el: '#demo',
        data: {
            firstName: '李',
            lastName: '力',
            fullName2: '李 力'
        },
        computed: {
            fullName: {
                get() {
                    return this.firstName + ' ' + this.lastName
                },
                set(value) {
                    const name = value.split(' ')
                    this.firstName = name[0]
                    this.lastName = name[1]
                }
            }
        }
    });

</script>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值