Vue的计算属性与监听属性

60 阅读1分钟

一、计算属性
计算属性需要定义在computed选项中
特点:计算属性虽然写的像方法,但是它的使用方式和属性一样,属性怎么使用,它就怎么使用。

        <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title>计算属性示例</title>
            <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
        </head>
        <body>
            <div id="app">
                姓: <input type="text" placeholder="First Name" v-model="firstNam
                e"><br>
                名: <input type="text" placeholder="Last Name" v-model="lastName">
                <br>
                <hr>
                姓名: <input type="text" placeholder="Full Name" v-model="fullNam
                e"><br>
            </div>
            <script>
                const { createApp } = Vue
                createApp({
                data() {
                return {
                firstName: '刘',
                lastName: '德华'
                }
                },
                computed: {
                // 计算属性虽然写的像⽅法,但是它的使⽤⽅法和属性⼀样
                fullName() {
                return this.firstName + this.lastName;
                }
                }
                }).mount("#app")
            </script>
        </body>
        </html>

计算数据的get与set:
示例:需求是当我们修改全名时,姓和名也要跟着修改

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>计算属性示例</title>
    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
</head>
<body>
        <div id="app">
            姓: <input type="text" placeholder="First Name" v-model="firstNam
            e"><br>
            名: <input type="text" placeholder="Last Name" v-model="lastName">
            <br>
            <hr>
            姓名: <input type="text" placeholder="Full Name" v-model="fullNam
            e"><br>
        </div>
        <script>
            const { createApp } = Vue
            createApp({
            data() {
            return {
                firstName: '刘',
                lastName: '德华'
            }
            },
            computed: {
                fullName: {
                    get() {
                    return this.firstName + " " + this.lastName;
                    },
                    set(value) {
                        const arr = value.split(" ");
                        this.firstName = arr[0];
                        this.lastName = arr[1];
                    }
                }
            },
            }).mount("#app")
        </script>

</body>
</html>

二、监听属性
作⽤:Vue提供的⼀个更通⽤的⽅法,来监听数据的变化。当需要在数据变化时执⾏异步或开销较⼤的操 作时,这个⽅式是最有⽤的。
语法关键字: watch

        <!DOCTYPE html>
        <html lang="en">
        <head>
         <meta charset="UTF-8">
         <meta name="viewport" content="width=device-width, initial-scale=1.0">
         <title>监听示例</title>
         <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
        </head>
        <body>
         <div id="app">
         姓: <input type="text" placeholder="First Name" v-model="firstNam
        e"><br>
         名: <input type="text" placeholder="Last Name" v-model="lastName">
        <br>
         <hr>
         姓名:{{fullNameWatch}}
         </div>
         <script>
         const { createApp } = Vue
         createApp({
         data() {
         return {
         firstName: '刘',
         lastName: '⼩刘',
         fullNameWatch: " "
         }
         },
         watch: {
         // watch⾥⾯每个function都有两个参数,其中第⼀个是newValue,
         // 第⼆个是oldValue,如果只需要使⽤到新的值那么就只写⼀个参数就可以firstName: function (newValue, oldValue) {
         this.fullNameWatch = newValue + " " + this.lastName;
         },
         lastName: function (newValue, oldValue) {
         this.fullNameWatch = this.firstName + " " + newValue;
         }
         }
         }).mount("#app")
         </script>
         </body>

         </html>

计算属性与监听的区别:
computed函数需要return值让vue来读取,⽽watch不需要return
computed⾥⾯只能写同步的代码,不能写异步的代码,⽽watch可以