Vue中计算属性

       一般情况下属性都是放在data中的,但是有些属性可能是需要经过一些计算才能得出,那么,我们可以把这类属性变成计算属性。此时,需要将这些计算属性写到computed中,和将属性写在data中是一样的。表面上看,计算属性和methods一样,实际上,计算属性更加智能,他是基于它们的响应式依赖进行缓存的。也就是说,只要相关依赖(比如下面的例子中的“area”)没有发生变化,那么这个计算属性的函数就不会重新执行,而是直接返回之前的值。这个缓存功能使计算属性访问起来更高效。
    

计算属性set:

set方法是用于修改data中定义属性的值的方法。例如先写了需要根据详细地址拆出省、市、区。在使用set方法时必须提供get方法。
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://cdn.jsdelivr.net/npm/vue"></script>
    <title>Vue中计算属性</title>
</head>

<body>
    <div id="app">
        <div>
            <label>长:</label>
            <input type="text" v-model:value="length2">
        </div>
        <div>
            <label>宽:</label>
            <input type="text" v-model:value="width2">
        </div>
        <div>
            面积:{{area}}
        </div>注:v-model:value是将该输入框的值与data中的值进行绑定。
        <h4>计算属性set:</h4>
        <div>
            <label>省:</label>
            <input type="text" name="province" v-model:value="province">
        </div>
        <div>
            <label>市:</label>
            <input type="text" name="city" v-model:value="city">
        </div>
        <div>
            <label>区:</label>
            <input type="text" name="district" v-model:value="district">
        </div>
        <div>
            <label>详细地址:</label>
            <input type="text" v-model:value="address">
        </div>
    </div>
    <script>
        new Vue({
            el: "#app",
            data: {
                length2: 0,
                width2: 0,
                province: '',
                city: '',
                district: '',
            },
            computed: {
                area() {
                    return this.length2 * this.width2
                },
                address: {
                    get() {
                        let ret = ''
                        if (this.province) {
                            ret += this.province + ''
                        };
                        if (this.city) {
                            ret += this.city + ""
                        };
                        if (this.district) {
                            ret += this.district + ""
                        }
                        return ret
                    },
                    set(value) {
                        let ret = value.split(/省|市|区/)
                        if (ret && ret.length > 0) {
                            this.province = ret[0]
                        }
                        if (ret && ret.length > 1) {
                            this.city = ret[1]
                        }
                        if (ret && ret.length >2){
                            this.district = ret[2]
                        }
                    }
                }
            }
        })
    </script>
</body>

</html>

 

posted @ 2020-02-20 11:29  xsan  阅读(2188)  评论(1编辑  收藏  举报