发表于: 2023-05-09 21:18:35

0 279




今天的vue知识点:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>姓名案例_插值语法实现</title>
    <script type="text/javascript" src="../vue_basic/vue.js"></script>
  </head>
  <body>
    <div id="root">
        姓:<input type="text" v-model="firstName"> <br></br>
        名:<input type="text" v-model="lastName"> <br></br>
        姓名:<span>{{firstName.slice(0,3)}}-{{lastName}}</span>
    </div>
    <script>
      Vue.config.productionTip = false;
      const vm = new Vue({
        el: '#root',
        data: {
          firstName:'张',
          lastName: '三'
        },
      });
</script>
  </body>
</html>


<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>姓名案例_methods实现</title>
    <script type="text/javascript" src="../vue_basic/vue.js"></script>
  </head>
  <body>
    <div id="root">
        姓:<input type="text" v-model="firstName"> <br></br>
        名:<input type="text" v-model="lastName"> <br></br>
        姓名:<span>{{fullName()}}</span>
    </div>
    <script>
      Vue.config.productionTip = false;
      const vm = new Vue({
        el: '#root',
        data: {
          firstName:'张',
          lastName: '三'
        },
        methods: {
            fullName(){
                return this.firstName + '-' + this.lastName
            }
        },
      });
</script>
  </body>
</html>


<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>姓名案例_计算属性实现</title>
    <script type="text/javascript" src="../vue_basic/vue.js"></script>
  </head>
  <body>


<!--
    计算属性:
        1.定义:要用的属性不存在,要通过已有属性计算得来。
        2.原理: 底层借助了objcet.defineproperty方法提供的getter和setter。
        3.get函数什么时候执行?
            (1).初次读取时会执行一次。
            (2).当依赖的数据发生改变时会被再次调用。
        4.优势: 与methods实现相比,内部有缓存机制(复用),效率更高,调试方便
        5.备注:
            1.计算属性最终会出现在vm上,直接读取使用即可。
            2.如果计算属性要被修改,那必须写set函数去响应修改,且set中要引起计算时依赖的数据发生改变。
        -->




    <div id="root">
        姓:<input type="text" v-model="firstName"> <br></br>
        名:<input type="text" v-model="lastName"> <br></br>
        姓名:<span>{{fullName}}</span> <br></br>
        姓名:<span>{{fullName}}</span> <br></br>
        姓名:<span>{{fullName}}</span> <br></br>
        姓名:<span>{{fullName}}</span>
    </div>
    <script>
      Vue.config.productionTip = false;
      const vm = new Vue({
        el: '#root',
        data: {
          firstName:'张',
          lastName: '三'
        },
        computed:{
            fullName:{
                //get有什么用?当有人读取fullName时,get就会被调用, 且返回值就作为fullName的 值
                //get什么时候 调用?1.初次读取fullName时。2.所依赖的数据发生变化时。
                get(){
                    console.log('get被调用了')
                    return this.firstName + '-' + this.lastName
                },
                //set什么时候调用?当fullName被修改时
                set(value){
                    console.log('set', value)
                    const arr = value.split('-')
                    this.firstName = arr[0]
                    this.lastName = arr[1]
                }
            }
        }
      });
</script>
  </body>
</html>



<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>姓名案例_计算属性简写</title>
  <script type="text/javascript" src="../vue_basic/vue.js"></script>
</head>

<body>
  <div id="root">
    姓:<input type="text" v-model="firstName"> <br></br>
    名:<input type="text" v-model="lastName"> <br></br>
    姓名:<span>{{fullName}}</span>
  </div>
  <script>
    Vue.config.productionTip = false;
    const vm = new Vue({
      el: '#root',
      data: {
        firstName: '张',
        lastName: '三'
      },
      computed: {
        //完整写法
        //  fullName:{
        //     get(){
        //         console.log('get被调用了')
        //         return this.firstName + '-' + this.lastName
        //     },
        //     set(value){
        //         console.log('set', value)
        //         const arr = value.split('-')
        //         this.firstName = arr[0]
        //         this.lastName = arr[1]
        //     }
        //  }

        // 简写
        fullName() {
          console.log('get被调用了')
          return this.firstName + '-' + this.lastName
        }
      }
    });
  </script>
</body>

</html>


<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>天气案例</title>
    <script type="text/javascript" src="../vue_basic/vue.js"></script>
  </head>
  <body>
    <div id="root">
        <h2>今天天气很{{info}}</h2>
        <button @click="changeWeather">切换天气</button>
    </div>
    <script>
      Vue.config.productionTip = false;
      const vm = new Vue({
        el: '#root',
        data: {
            isHos:true
        },
        computed:{
            info(){
                return this.isHos? '炎热': '凉爽'
            }
        },
        methods: {
            changeWeather(){
                return this.isHos = !this.isHos
            }
        },
      })
</script>
  </body>
</html>


<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>天气案例-监视属性</title>
    <script type="text/javascript" src="../vue_basic/vue.js"></script>
</head>

<body>

    <!--
    监视属性watch:
        1.当被监视的属性变化时,回调函数自动调用,进行相关操作
        2.监视的属性必须存在,才能进行监视!!
        3.监视的两种写法:
            (1).new Vue时传入watch配置
            (2).通过vm.$watch监视
        -->

    <div id="root">
        <h2>今天天气很{{info}}</h2>
        <button @click="changeWeather">切换天气</button>
    </div>
    <script>
        Vue.config.productionTip = false;
        const vm = new Vue({
            el: '#root',
            data: {
                isHos: true
            },
            computed: {
                info() {
                    return this.isHos ? '炎热' : '凉爽'
                }
            },
            methods: {
                changeWeather() {
                    return this.isHos = !this.isHos
                }
            },
            watch: {
                 isHos: {
                     immediate: true, //初始化时让handler调用一下
                     //handler 什么时候调用?当isHot发生改变时
                     handler(newValue, oldValue) {
                        console.log('isHot被修改了', newValue, oldValue)
                    }
                }
            }
        })

        // vm.$watch('isHos', {
        //     immediate: true, //初始化时让handler调用一下
        //     //handler 什么时候调用?当isHot发生改变时
        //     handler(newValue, oldValue) {
        //         console.log('isHot被修改了', newValue, oldValue)
        //     }
        // })
    </script>
</body>

</html>


<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>天气案例-深度监视</title>
    <script type="text/javascript" src="../vue_basic/vue.js"></script>
</head>

<body>
    <!--
        深度监视:
            (1).Vue中的watch默认不监测对象内部值的改变 (一层)
            (2).配置deep:true可以监测对象内部值改变(多层) 。
        备注:
            (1).Vue自身可以监测对象内部值的改变,但Vue提供的watch默认不可以!
            (2).使用watch时根据数据的具体结构,决定是否采用深度监视。
        -->

    <div id="root">
        <h2>今天天气很{{info}}</h2>
        <button @click="changeWeather">切换天气</button>
        <hr/>
        <h3>a的值是:{{numbers.a}}</h3>
        <button @click="numbers.a++">点击让a+1</button>
        <h3>b的值是:{{numbers.b}}</h3>
        <button @click="numbers.b++">点击让b+1</button>
    </div>
    <script>
        Vue.config.productionTip = false;
        const vm = new Vue({
            el: '#root',
            data: {
                isHos: true,
                numbers:{
                    a:1,
                    b:1
                }
            },
            computed: {
                info() {
                    return this.isHos ? '炎热' : '凉爽'
                }
            },
            methods: {
                changeWeather() {
                    return this.isHos = !this.isHos
                }
            },
            watch: {
                isHos: {
                    //  immediate: true, //初始化时让handler调用一下
                     handler(newValue, oldValue) {
                        console.log('isHot被修改了', newValue, oldValue)
                    }
                },
                // //监视多级结构下某个属性的变化
                // 'numbers.a':{
                //     handler(){
                //         console.log('a被改变了');
                //     }
                // }
                //监视多级结构下所有属性的变化
                numbers:{
                    deep:true,
                    handler(){
                        console.log('numbers被改变了');
                    }
                }
            }
        })
    </script>
</body>

</html>


<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>天气案例-监视属性简写</title>
  <script type="text/javascript" src="../vue_basic/vue.js"></script>
</head>

<body>
  <div id="root">
    <h2>今天天气很{{info}}</h2>
    <button @click="changeWeather">切换天气</button>
  </div>
  <script>
    Vue.config.productionTip = false;
    const vm = new Vue({
      el: '#root',
      data: {
        isHos: true,
      },
      computed:{
        info() {
          return this.isHos ? '炎热' : '凉爽'
        }
      },
      methods:{
        changeWeather() {
          return this.isHos = !this.isHos
        }
      },
      watch: {
        isHos: {
          //正常写法
          //  immediate: true, //初始化时让handler调用一下
          //  deep:true, //深度监视
          handler(newValue, oldValue) {
            console.log('isHot被修改了', newValue, oldValue)
          }
        },
      //简写
      // isHos(newValue, oldValue){
      //   console.log('isHot被修改了', newValue, oldValue)
      // }
      }
    })
  </script>
  </script>
</body>

</html>


返回列表 返回列表
评论

    分享到