虽然Vue3.0的时代就要带来啦~~今天就继续复习一下Vue2.0叭

121 阅读2分钟

我正在参加跨端技术专题征文活动,详情查看:juejin.cn/post/710123…

👨‍🎓作者:Java学术趴

🏦仓库:GithubGitee

✏️博客:CSDN掘金InfoQ云+社区

💌公众号:Java学术趴

🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。

🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。微信搜索公众号Java学术趴联系小编。

☠️每日毒鸡汤:这个社会是存在不公平的,不要抱怨,因为没有用!人总是在反省中进步的!

👋大家好!我是你们的老朋友Java学术趴,好久没有时间写文章,最近忙着找工作。没有太多的时间给大家分享文章,从今天开始给大家持续发布新的技术文章,还希望大家多多支持支持。新的一年就要到来了,还记着在前几年,从SSM到SpringBoot,在到SpringBoot+vue2.0的时代。今年估计又会发生巨大的编程语言变革。俗话说:时代的几步必然会带动科技的发展,科技的发展必将带来新一波编程语言的到来。在今年,个人认为Vue3.0的时代就会到来,现在我们正处于Vue2.0+Vue3.0的时代,今年Vue3.0必将会替代Vue2.0的存在。

我们这篇文章也是会从Vue2.0到Vue3.0来一个过度,让大家先巩固一下Vue2.0,之后Vue3.0进发。大家如果感觉有帮助的话,可以点赞多支持支持。感谢感谢~~💓💓💓

2.1 Vue中的计算属性

2.1.1 计算属性的定义


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

<!DOCTYPE html>
<html lang="en" xmlns:v-model="http://www.w3.org/1999/xhtml">
<head>
  <meta charset="UTF-8">
  <title>姓名案例-计算属性</title>
  <!-- 引入vue.js文件 -->
  <script type="text/javascript" src="../../../../../js/vue.js"></script>
</head>
<body><!-- 准备好一个容器 -->
<div id="root">
  姓:<input type="text" v-model="firstName"><br/><br/>
  名:<input type="text" v-model="lastName"><br/><br/>
  <!--
    要注意计算属性存在于vm中,就像调用data中的数据写法一样,直接调用即可。
    千万不要写成:
      全名:<span>{{fullName.get()}}</span>
  -->
  全名:<span>{{fullName}}</span>
</div><script>
  Vue.config.productionTip = false;
​
  let a = 1;
  <!--声明一个Vue实列-->
  const vm = new Vue({
    el: "#root",
    /* Vue中认为data中的数据就是属性 */
    data: {
      firstName: '张',
      lastName: '三',
    },
    /* 计算属性就是根据原来的属性重新计算出来的一个属性 */
    /* 计算属性要放在一个全新的对象(computed)中 */
    /* computed对象中的属性不会存储到vm的 _data中 */
    /* computed对象中的属性会通过 _data中的属性计算完之后直接丢到vm中,在vm中存在 fullName*/
    computed: {
      /* 我们还需要将每一个计算过程放到一个对象中,因为计算的方法可能是很复杂的。*/
      fullName:{
        /* get有什么作用?当有人读取fullName时,get就会被调用,且返回值就作为fullName的值 */
        /*
          get什么时候调用? 1.初次读取fullName时。 2.所依赖的数据发生变化时。
​
          在计算属性的这个地方存在一个缓存的机制。当初次调用fullName的时候,
          他会把这个fullName这个值存储到缓存中。当Vue第二次调用这个fullName的时候,
          发现其中依赖的数据没有发生变化,那么此时Vue就会从缓存中来读取这个fullName的值。
          不会再次调用get()方法。
          只有当Vue再次使用fullName的时候,发现此时fullName的依赖数据发生了变化,
          此时就会从新调用get()方法,并且将这次调用产生的fullName值存储到缓存中替换掉原来的缓存中的值。
        */
        get(){
          /*
            此时的this指向的是Vue实列对象,也就是vm。Vue已经帮我们维护好了
            既然我们已经获取到了vm,那么vm中的所有数据我们都可以获取带到了。
          */
          console.log(this);  //此处的this是 vm
          /* 此时就是代表:funName = '小猪佩奇' */
          /* 注意:这个a是属于windows的,不被Vue对象所管理。
          *        所以不论在vue中怎么改变这个a的值,最终a的值永远是1。
          *
          * */
          return this.firstName + '-' + this.lastName + a;
        },
        /* set什么时候调用?当fullName被修改时,这个方法不是非要写的。
        *                 如果你确定要修改数据再写,不修改数据的时候可以不写。
        * 这个set方法中也存在 this,此时的this指向的也是Vue实例对象vm。
        * */
        /* 这个value值接收的就是我们改变的值 */
        set(value){  // '李-四'
          /*
            这个地方我们只是修改了之后简单的打印一下,并没有将修改后的计算属性的值赋值给data中的数据
            此时的value就是计算属性。我们需要将这个计算属性格式的数据拆分为data格式的数据并从新赋值。
​
            一定要引起计算属性依赖的data属性发生变化。
          */
          console.log('set',value);
          let array = value.split('-');
          this.firstName = array[0];
          this.lastName = array[1];
          /* 当我们修改了data中的数据,他会从新调用计算属性中的get()方法来修改全名 */
        }
      }
    }
  });
</script>
</body>
</html>

2.1.2 计算属性的简写形式


<!DOCTYPE html>
<html lang="en" xmlns:v-model="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>姓名案例-计算属性的简写方法</title>
    <!-- 引入vue.js文件 -->
    <script type="text/javascript" src="../../../../../js/vue.js"></script>
</head>
<body><!--
    简写的形式只能应用于:
        只考虑计算属性的读取而不考虑计算属性的修改的时候。
-->
<!--
​
        调用methods中的函数的两种情况:
            (1):绑定事件调用的函数,括号可加可不加。
            (2):插值语法调用函数的时候,必须加括号
​
        computed中调用的不是函数,就是一个属性,不能加括号。
-->
<div id="root">
    姓:<input type="text" v-model="firstName"><br/><br/>
    名:<input type="text" v-model="lastName"><br/><br/>
    <!-- 注意:简化写法调用的也是vm中的fullName这个属性,而不是fullName方法,
              在vm中根本就不存在这个 fullName()函数。
    -->
    全名:<span>{{fullName}}</span>
</div><script>
    Vue.config.productionTip = false;
​
    <!--声明一个Vue实列-->
    const vm = new Vue({
        el: "#root",
        /* Vue中认为data中的数据就是属性 */
        data: {
            firstName: '张',
            lastName: '三',
        },
        computed: {
            // 完整版
/*            fullName:{
                get(){
                    console.log(this);
                    return this.firstName + '-' + this.lastName;
                },
                set(value){
                    console.log('set',value);
                    let array = value.split('-');
                    this.firstName = array[0];
                    this.lastName = array[1];
                }
            }*/
            // 简化版 (对象中函数的简化写法,这个函数代表的就是以前的get()方法,
            //  fullName:function (){
            //        实际开发中一般不需要计算属性的值,不写set()方法。)
            fullName(){
                console.log(this);
                return this.firstName + '-' + this.lastName;
            }
        }
    });
</script>
</body>
</html>