• Vue.js 观察者(watch)


    Vue.js 观察者(watch)

    watch 属性用于监视 vue 实例上的数据变动,并相应的改变其他变量的值。

    用法

    实例 1

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>Vue.js 观察者(watch)</title>
        <meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1, user-scalable=no">
        <meta name="apple-mobile-web-app-capable" content="yes">
        <meta name="apple-mobile-web-app-status-bar-style" content="black">
        <link rel="stylesheet" href="css/mui.min.css">
        <title>Vue.js 观察者(watch)</title>
        <script src="http://cdn.bootcss.com/vue/2.4.2/vue.min.js"></script>
    </head>
    <body>
        <div id="app">
                <input type="text" v-model="firstName"/>
                <input type="text" v-model="lastName"/>
                <p>我的名字是:{{fullName}}</p>
            </div>
    
        <script>
           var em = new Vue({
                el: '#app',
                data: {
                    firstName: 'stephen',
                    lastName: 'curry',
                    fullName: 'stephen curry'
                },
                watch: {
                    firstName: function (curVal, oldVal) {
                        this.fullName = curVal + ' ' + this.lastName
                    },
                    lastName: function (curVal, oldVal) {
                        this.fullName = this.firstName + ' ' + curVal
                    }
                }
            })
        </script>
    </body>
    </html>
    

    上述代码中,监视了firstName和lastName这两个变量,当用户输入新的数据改变其值时,watch就会执行对应的函数,返回处理后的值并赋值给fullName变量。

    注释:curVal 表示当前数据,oldVal 表示前一步数据(或默认数据),可参考实例2的代码。

    实例 2

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>Vue.js 观察者(watch)</title>
        <meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1, user-scalable=no">
        <meta name="apple-mobile-web-app-capable" content="yes">
        <meta name="apple-mobile-web-app-status-bar-style" content="black">
        <link rel="stylesheet" href="css/mui.min.css">
        <title>Vue.js 观察者(watch)</title>
        <script src="http://cdn.bootcss.com/vue/2.4.2/vue.min.js"></script>
    </head>
    <body>
        <div id="app">
            <input type="text" v-model="number"/>
            <p>result:{{result}}</p>
        </div>
    
        <script>
            var app = new Vue({
                el: '#app',
                data: {
                    number: 1,
                    result: 1
                },
                watch: {
                    number: function(curVal, oldVal) {
                        this.result = curVal*1 + oldVal*1
                    }
                }
            })
        </script>
    </body>
    </html>
    

    上述代码中,result 结果为当前输入数据和前一步数据之和。另外,oldVal 参数可缺省。

    注意:当监视的数据是一个数组或者对象时,curVal 和 oldVal 是相等的,因为这两个形参指向的是同一个数据对象。

    Watch deep 选项

    类型是对象的变量,当键值发生变化时,为了监听到数据变化,需要设置deep选项为true,如下:

    实例 3

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>Vue.js 观察者(watch)</title>
        <meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1, user-scalable=no">
        <meta name="apple-mobile-web-app-capable" content="yes">
        <meta name="apple-mobile-web-app-status-bar-style" content="black">
        <link rel="stylesheet" href="css/mui.min.css">
        <title>Vue.js 观察者(watch)</title>
        <script src="http://cdn.bootcss.com/vue/2.4.2/vue.min.js"></script>
    </head>
    <body>
        <div id="app">
            <input type="text" v-model="fruits.count"/>
            <input type="text" v-model="fruits.name"/>
            <p>fruits:{{message}}</p>
        </div>
    
        <script>
            new Vue({
                el: '#app',
                data: {
                    fruits: {
                        name: "香蕉",
                        count: 5
                    },
                    message: '5条香蕉'
                },
                watch: {
                    fruits: {
                        handler(obj){
                            this.message = obj.count + '条' + obj.name
                        },
                        deep: true
                    }
                }
            })
        </script>
    </body>
    </html>
    

    计算属性 与 watch

    计算属性在大多数情况下更合适,但有时也需要一个自定义的 watcher 。这是为什么 Vue 提供一个更通用的方法通过 watch 选项,来响应数据的变化。当你想要在数据变化响应时,执行异步操作或开销较大的操作,这是很有用的。

  • 相关阅读:
    ASP.NET MVC 3.0 新特性之Controller
    ASP.NET MVC 3.0 新特性之View
    微软AD活动目录介绍
    ASP.NET MVC 3.0 新特性之Model
    [ASP.NET MVC3]Chart的ActionResult扩展]
    MVC3RAZOR尝鲜之漂亮的chart图表
    VS2003配置和使用AJAX
    Django操作cookie和session
    Django的forms组件
    开发一个简易的图书增删改查页面
  • 原文地址:https://www.cnblogs.com/pzkperson/p/10717971.html
Copyright © 2020-2023  润新知