0
点赞
收藏
分享

微信扫一扫

vue的计算属性与侦听属性

书呆鱼 2022-04-27 阅读 124

vue的计算和侦听属性

计算属性(computed)

计算属性用于处理复杂的业务逻辑

计算属性具有依赖性,计算属性依赖 data中的初始值,只有当初始值改变的时候,计算属性才会再次计算

计算属性一般书写为一个函数,返回了一个值,这个值具有依赖性,只有依赖的那个值发生改变,他才会重新计算

计算属性的完整写法其实是其中包含了getter和setter方法,声明一个对象,我们在获取数据时会调用get方法,设置数据时会调用set方法

<div id="demo">{{ fullName }}</div>
var vm = new Vue({
  el: '#demo',
  data: {
    firstName: 'Foo',
    lastName: 'Bar',
    fullName: 'Foo Bar'
  },
  computed: {
	  fullName: {
	    // getter
	    get: function () {
	      return this.firstName + ' ' + this.lastName
	    },
	    // setter
	    set: function (newValue) {
	      var names = newValue.split(' ')
	      this.firstName = names[0]
	      this.lastName = names[names.length - 1]
	    }
	 }
 }

computed和methods的区别

        <div id="app">
            <!-- 原始方式,该方式面对数据计算时比较繁琐,不推荐使用 -->
            <p>名字:{{firstname}} 姓氏:{{lastname}}</p>
            <!-- methods方式,每获取一次数据就调用一次函数 -->
            <p>{{getInfo1()}}</p>
            <p>{{getInfo1()}}</p>
            <p>{{getInfo1()}}</p>
            <p>{{getInfo1()}}</p>
            <!-- computed方式,当数据没有发生变化时,仅调用一次,会将数据进行缓存 -->
            <p>{{getInfo2}}</p>
            <p>{{getInfo2}}</p>
            <p>{{getInfo2}}</p>
            <p>{{getInfo2}}</p>
            <p>{{getInfo2}}</p>
        </div>
    </body>
    <script type="text/javascript">
        var app = new Vue({
            el: "#app",
            data: {
                firstname: "Kobe",
                lastname: "Bryant"
            },
            methods: {
                getInfo1: function(){
                    console.log("methods");
                    return this.firstname + "" + this.lastname;
                }
            },
            computed: {
                getInfo2: function(){
                    console.log("computed");
                    return this.firstname + "" + this.lastname;
                }
            }
        })
    </script>

注:计算属性会进行缓存,如果多次使用时,依赖的数据没有发生改变,计算属性只会调用一次

侦听属性(watch)

使用watch来监听指定数据的改变,进而调用对应的逻辑处理数据

<div id="app">
    <input type="number" name="" v-model="num">
    {{price}}
    {{total}}
</div>
<script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
<script >
  let vm = new Vue({
    el: '#app',
    data: {
      price:"55",
      num:"",
      total:""
    },
    watch:{
      num( newVal ){
        this.total = this.price * newVal
      }
    }
  })
</script>

总结:
1.计算属性变量在computed中定义,写法跟写方法一样,有返回值,函数名直接在页面模板中渲染,不加小括号 ;监听属性只能监听data中定义的变量。

2.计算属性是声明式的描述一个值依赖了其他值,依赖的值改变后重新计算结果更新DOM;监听属性是监听定义的变量,当定义的值发生变化时,执行相对应的函数。

举报

相关推荐

0 条评论