zoukankan      html  css  js  c++  java
  • watch监听/computed计算属性

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 
     4 <head>
     5     <meta charset="UTF-8">
     6     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     7     <title>Document</title>
     8     <script src='../js/vue.js'></script>
     9 </head>
    10 
    11 <body>
    12     <div id="app">
    13         <input type="text" v-model='firstname'> +
    14         <input type="text" v-model='lastname'> =
    15         <input type="text" v-model=fullname>
    16     </div>
    17 </body>
    18 <script>
    19     let vm = new Vue({
    20         el: '#app',
    21         data: {
    22             firstname: '',
    23             lastname: '',
    24             fullname: '',
    25         },
    26         methods: {},
    27         watch: { //这个方法可以监听vue实例中所有属性的变化,从而触发这个watch中的处理函数  watch对象里面采用键值对方式,key:监听的数据,val:监听的回调
                //但是watch监听只适用于单个数据的监听,多个数据就要写多个键值对。业务逻辑一样也无法复用代码。显得代码冗余
    28 'firstname': function(newval, oldval) { //表示监听data中firstname的变化,变化就执行后面的函数,newval为改变后的值,oldval为改变前的值 29 console.log(oldval + '---' + newval) // 30 this.fullname = newval + '-' + this.lastname; 31 }, 32 'lastname': function(newval, oldval) { //表示监听data中lastname的变化,变化就执行后面的函数,newval为改变后的值,oldval为改变前的值 33 console.log(oldval + '---' + newval) // 34 this.fullname = this.firstname + '-' + newval; 35 },
              '$route.path':function(newval){ //监听路由的变化, 引入vue-router.js后,vue实例就会有这个$route属性,$route上的path属性就表示hash路由# 后的内容,
              //加入有这样的业务,登录页面显示欢迎来到登录界面,注册页面就显示欢迎注册我们的产品,就可以监听路由
             },
    36 37 } //watch 除了能监听data中数据的变化、dom变化,还可以监听非dom元素的变化 38 //例如 路由的变化, 39 //引入 路由包 vue-router.js 后,vue实例就自动绑定了一个$router对象, 40 //使用 '$router.path[或者任务$router中的属性值]:function(){}'就可以监听到这些值的改变从而做出相应的动作!!! 41    42 }) 43 </script> 44 45 </html>

     computed计算属性:

      

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <script src='../js/vue.js'></script>
    </head>
    
    <body>
        <div id="app">
            <input type="text" v-model='firstname'> +
            <input type="text" v-model='lastname'> =
            <input type="text" v-model='fullname'>
            <!-- 这里的full那么  是computed属性中的 fullname 这个key -->
        </div>
    </body>
    <script>
        let vm = new Vue({
            el: '#app',
            data: {
                firstname: '',
                lastname: '',
    
            },
            methods: {
                //methods/watch/computed 区别;
                // computed必须有return 值、结果会被缓存,watch不一定需要,methods也不一定需要
                // methods 适合写复杂的业务逻辑,watch可以写某些具体的业务逻辑 而computed主要负责简单的数据操作
                //watch可以看做methods和computed的结合
            },
            watch: { //这个方法可以监听data中指定数据的变化,从而触发这个watch中的处理函数
                'firstname': (newval, oldval) => { //表示监听data中firstname的变化,变化就执行后面的函数,newval为改变后的值,oldval为改变前的值
                    console.log(oldval + '---' + newval) //
                },
                'lastname': (newval, oldval) => { //表示监听data中lastname的变化,变化就执行后面的函数,newval为改变后的值,oldval为改变前的值
                    console.log(oldval + '---' + newval) //
                }
    
            },
            computed: { //计算属性 本质是function,但是调用的时候不需要加上(),直接当做属性即可使用,v-model 直接绑定计算属性 fullname
                'fullname': function() {
                    //把原本定义在data中的fullname放到computed属性中,进行计算
                    //这里引用了 data中的两个数据,只要被引用的数据任何一个改变
                    //都会触发计算属性去重新求值并返回计算后的结果,并且缓存起来
                    //如果数据不变,下次任何地方用到这个值就直接去缓存里拿数据,从而提高效率
                    //  
                    return this.firstname + '-' + this.lastname
              //到这里  computed计算属性都是根据依赖数据的改变而得到
              //其实还可以双向计算,如果计算属性结果是form表单中的input可以修改,或者通过代码改变结果,那么依赖也可以随着改变!!!
              
        
                 /* 'fullname':{//完整的计算属性写法,键值对 ,值是一个对象,包含get set两个钩子
                        get(){}, //默认就会触发,当依赖改变也会触发这个get钩子
                        set(){}, //当计算属性结果改变不是通过依赖计算得到,而是直接修改这个结果,会触发这个set钩子函数
                      } */

    },
            func(){ //computed 中 写法二, 直接定义一个函数, 这个函数名可以当做变量名使用。
              switch(this.firstname){
                ···
              }

            } //在vue实例控制的#app 这个div中, 如果func()中的firstname 改变 就会触发 func()这个函数, 【
    计算属性 本质是function,但是调用的时候不需要加上(),直接当做属性即可使用 } })
             可以在#app 这个div 中 使用 v-for=“(item,index) in
    func”【其实就是在循环func的返回值】,如果func()中的firstname 改变,就可以触发func里的逻辑循环渲染不同的数据!!!

    </script>

    </html>

      

  • 相关阅读:
    Appium
    Appium滑动直到页面底部
    使用Maven以及碰到的坑们(持续更新中。。。)
    通过license server激活IntelliJ IDEA
    HDU 1166
    HDU 2444
    HDU 浙江科技学院校赛2016
    HDU 5651
    HDU 5650
    Interview 位运算
  • 原文地址:https://www.cnblogs.com/Hijacku/p/14737850.html
Copyright © 2011-2022 走看看