首页 > 其他分享 >Vue2入门之超详细教程八-计算属性

Vue2入门之超详细教程八-计算属性

时间:2023-05-03 18:22:41浏览次数:53  
标签:教程 Vue firstName 之超 lastName Vue2 全名 fullName 属性

1、简介

  计算属性:

    1.定义:要用的属性不存在,要通过已有的属性计算得来

    2.原理:底层借助Object.defineproperty方法提供的getter和setter

    3.Get函数什么时候执行?

      (1) 初次读取时会执行一次

      (2) 当依赖的数据发生改变时会被再次调用

    4.优势:与methods实现相比,内部有缓存机制(复用),效率更高,调用方便。

    5.备注:

      (1) 计算属性最终会出现在vm上,直接读取使用即可

      (2) 如果计算属性要被修改,那必须写set函数去响应修改,且set中要引起计算时依赖的数据发生改变

  学习Vue之前最后会一些HTML和CSS的基础知识,HTML基础知识 传送门,CSS基础知识 传送门

2、姓名案例

  让用户输入姓、名,自动显示全名,使用三种不同的方式实现。

1. 插值语法实现

  在vscode中创一个新目录,叫“07_计算属性”,在下面创建一个“1姓名案例_插值语法实现.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=`, initial-scale=1.0">

    <title>Document</title>

    <script type="text/javascript" src="../js/development/vue.js"></script>

</head>

<body>

    <div id="root">

        <input type="text" v-model:value="firstName"><br>

        <input type="text" v-bind:value="lastName"><br>

        全名: <span>{{firstName}} - {{lastName}}</span>

    </div>

    <script type="text/javascript">

        Vue.config.productionTip = false

        var vm = new Vue({

            el:'#root',

            data:{

                firstName:"张",

                lastName:"三"

            }

        })

    </script>

</body>

</html>

  以上案例使用插值语法简单实现一个用户分别输入姓和名,然后联动展示的一个效果

  根据运行结果可以看出第一个姓的输入框在全名中有联动变化,但第二个输入框的输入并没有变化,这是因为v-bind和v-model的特性,这两个的区别在前面章节有提到过,这边在帮大家加强一下印象

  如果用户给出了特殊定制的需求,姓取值用户输入的前2位,名取值用户输入的前3位,我们该如何作用?很简单,只需要做以下改动即可:

  firstName.slice(0,2)

  lastName.slice(0,3)

  全部代码如下:

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=`, initial-scale=1.0">

    <title>Document</title>

    <script type="text/javascript" src="../js/development/vue.js"></script>

</head>

<body>

    <div id="root">

        <input type="text" v-model:value="firstName"><br>

        <input type="text" v-model:value="lastName"><br>

        全名: <span>{{firstName.slice(0,2)}} - {{lastName.slice(0,3)}}</span>

    </div>

    <script type="text/javascript">

        Vue.config.productionTip = false

        var vm = new Vue({

            el:'#root',

            data:{

                firstName:"张",

                lastName:"三"

            }

        })

    </script>

</body>

</html>

 2. Methods语法实现

  在“07_计算属性”文件夹下下面创建一个“2姓名案例_methods语法实现.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>Document</title>

    <script type="text/javascript" src="../js/development/vue.js"></script>

</head>

<body>

     <div id="root">

        姓:<input type="text" v-model:value="firstName"><br>

        名:<input type="text" v-model:value="lastName"><br>

        全名:<span>{{fullName()}}</span>

     </div>

    <script type="text/javascript">

        Vue.config.productionTip = false

        new Vue({

            el:'#root',

            data:{

                firstName:'张',

                lastName:'三'

            },

            methods:{

                fullName(){

                    return this.firstName + '-' + this.lastName

                }

            }

        })

    </script>

</body>

</html>

3. 计算属性语法实现

  在“07_计算属性”文件夹下下面创建一个“3姓名案例_计算属性实现.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>Document</title>

    <script type="text/javascript" src="../js/development/vue.js"></script>

</head>

<body>

     <div id="root">

        姓:<input type="text" v-model:value="firstName"><br>

        名:<input type="text" v-model:value="lastName"><br>

        全名:<span>{{fullName}}</span>

     </div>

    <script type="text/javascript">

        Vue.config.productionTip = false

        new Vue({

            el:'#root',

            data:{

                firstName:'张',

                lastName:'三'

            },

            computed:{

                fullName:{

                    //get有什么作用?当有人读取fullName时,get就会被调用,且返回值就会作为fullName的返回值

                    //1.初次读取fullName时,2.所依赖的数据发生变化时

                    get(){

                        return this.firstName + '-' + this.lastName

                    }

                }

            }

        })

    </script>

</body>

</html>

   计算属性除了get方法还有set方法,set方法当数据被改变时被调用,全量代码如下:

<!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>Document</title>

    <script type="text/javascript" src="../js/development/vue.js"></script>

</head>

<body>

     <div id="root">

        姓:<input type="text" v-model:value="firstName"><br>

        名:<input type="text" v-model:value="lastName"><br>

        全名:<span>{{fullName}}</span>

        全名:<span>{{fullName}}</span>

        全名:<span>{{fullName}}</span>

        全名:<span>{{fullName}}</span>

     </div>

    <script type="text/javascript">

        Vue.config.productionTip = false

        const vm = new Vue({

            el:'#root',

            data:{

                firstName:'张',

                lastName:'三'

            },

            computed:{

                fullName:{

                    //get有什么作用?当有人读取fullName时,get就会被调用,且返回值就会作为fullName的返回值

                    //1.初次读取fullName时,2.所依赖的数据发生变化时

                    get(){

                        console.log('计算属性方法被调用了')

                        return this.firstName + '-' + this.lastName

                    },

                    //当fullName被修改时被调用

                    set(value){

                        var arr = value.split('-')

                        this.firstName = arr[0]

                        this.lastName = arr[1]

                    }

                }

            }

        })

    </script>

</body>

</html>

4. 计算属性简写方式

  简写方式必须在确定只读取属性,不会改变属性的情况下使用。

  在“07_计算属性”文件夹下下面创建一个“4姓名案例_计算属性简写方式.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>Document</title>

    <script type="text/javascript" src="../js/development/vue.js"></script>

</head>

<body>

     <div id="root">

        姓:<input type="text" v-model:value="firstName"><br>

        名:<input type="text" v-model:value="lastName"><br>

        全名:<span>{{fullName}}</span>

     </div>

    <script type="text/javascript">

        Vue.config.productionTip = false

        const vm = new Vue({

            el:'#root',

            data:{

                firstName:'张',

                lastName:'三'

            },

            computed:{

                fullName(){

                    console.log('计算属性方法被调用了')

                    return this.firstName + '-' + this.lastName

                }

            }

        })

    </script>

</body>

</html>

3、测试

  以上案例使用插值语法、methods语法和计算属性方法都可以实现,我们使用什么属性呢,建议使用计算属性语法,因为计算属性语法有缓存,当多次调用相同方法时,只会执行一次。

  我们做一下测试,分别使用methods方法和计算属性方法,在页面中多次调用相同方法并输出调用次数

1. Methods方法调用次数

  修改methods方法实现案例代码如下:

<!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>Document</title>

    <script type="text/javascript" src="../js/development/vue.js"></script>

</head>

<body>

     <div id="root">

        姓:<input type="text" v-model:value="firstName"><br>

        名:<input type="text" v-model:value="lastName"><br>

        全名:<span>{{fullName()}}</span>

        全名:<span>{{fullName()}}</span>

        全名:<span>{{fullName()}}</span>

        全名:<span>{{fullName()}}</span>

     </div>

    <script type="text/javascript">

        Vue.config.productionTip = false

        new Vue({

            el:'#root',

            data:{

                firstName:'张',

                lastName:'三'

            },

            methods:{

                fullName(){

                    console.log('methods方法被调用了')

                    return this.firstName + '-' + this.lastName

                }

            }

        })

    </script>

</body>

</html>

2. 计算属性方法调用次数

  修改计算属性方法实现案例代码如下:

<!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>Document</title>

    <script type="text/javascript" src="../js/development/vue.js"></script>

</head>

<body>

     <div id="root">

        姓:<input type="text" v-model:value="firstName"><br>

        名:<input type="text" v-model:value="lastName"><br>

        全名:<span>{{fullName}}</span>

        全名:<span>{{fullName}}</span>

        全名:<span>{{fullName}}</span>

        全名:<span>{{fullName}}</span>

     </div>

    <script type="text/javascript">

        Vue.config.productionTip = false

        new Vue({

            el:'#root',

            data:{

                firstName:'张',

                lastName:'三'

            },

            computed:{

                fullName:{

                    //get有什么作用?当有人读取fullName时,get就会被调用,且返回值就会作为fullName的返回值

                    //1.初次读取fullName时,2.所依赖的数据发生变化时

                    get(){

                        console.log('计算属性方法被调用了')

                        return this.firstName + '-' + this.lastName

                    }

                }

            }

        })

    </script>

</body>

</html>

4、小结

  计算属性比methods方法更有效率

  计算属性的调用方式不需要写(),语法与插值语法相同

  计算属性的简写方式必须在确定不会修改参数的情况下使用

标签:教程,Vue,firstName,之超,lastName,Vue2,全名,fullName,属性
From: https://www.cnblogs.com/lirongyang/p/17369466.html

相关文章

  • BootstrapBlazor组件保姆级教程
    BootstrapBlazor组件库保姆级使用教程BootstrapBlazor组件库官网https://www.blazor.zone/componentsBootstrapBlazor组件库github仓库地址https://github.com/dotnetcore/BootstrapBlazorBootstrapBlazor组件库gitee仓库地址https://gitee.com/LongbowEnterprise/Bootstra......
  • 交通安全标志图解教程 All In One
    交通安全标志图解教程AllInOne驾考:科目一、科目四交通标志图解道路交通标志警告标志禁令标志指示标志指路标志旅游区标志其他标志道路交通标线指示标线禁止标线警告标线其他标线其他标志标识交警手势图解车内功能键交通事故责任认定汽车仪表盘指示灯......
  • vue2实现数据聚合【scatter-clustering】组件封装
    实现如下效果:效果展示:https://code.juejin.cn/pen/7228568245148581943如果不会请移步到官网的栗子,请点击查看直接给大家上代码:整体代码片段1<template>2<divref="echarts"style="width:100%;height:300px;"></div>3</template>4<scrip......
  • 万众期待的FL Studio 2023最新发布的21版本新功能介绍/主题包/下载安装激活教程
    FLStudio21国人也叫它水果编曲软件,是一款有着25多年历史的经典音乐创作软件。全球已有上千万的用户每天在使用水果编曲创作自己的音乐。它被公认为最适合新手的编曲软件之一,有着业内领先的工作流,以及丰富的生产力插件,同时也是唯一一款支持终生免费升级的DAW软件。来自DJMAG评选的......
  • 【pytorch】土堆pytorch教程学习(四)Transforms 的使用
    transforms在工具包torchvision下,用来对图像进行预处理:数据中心化、数据标准化、缩放、裁剪、旋转、翻转、填充、噪声添加、灰度变换、线性变换、仿射变换、亮度/饱和度/对比度变换等。transforms本质就是一个python文件,相当于一个工具箱,里面包含诸如Resize、ToTensor、Nor......
  • 高颜值在线绘图平台ImageGP系列教程 - 功能介绍
    在线平台BIC是ImageGP的重构升级版,重构于2020年初。该平台采用配置文件快速部署工具、生成结果或结果报告。其绘图和分析基于R语言(ImageGP包,在早期ImageGP脚本的基础上重新进行了封装,GitHub,Gitee)、Python语言。左侧导航目前包括:1.Professionalplotsinseconds;2.......
  • 用vue2封装轮播图组件
    日常练习用vue2封装轮播图组件,传入图片信息数组。实现思想:图片组添加translate动画,通过轮播到第几张图片作为参数,让图片组整体移动。Carousel.vue<template><divclass="carousel"><divclass="carouselList"><!--图片列表--><ulclass="img&quo......
  • Theano 中文文档 0.9 - 7.1.1 Python教程
    7.1.1Python教程译者:Python文档协作翻译小组,原文:Pythontutorial。本文以CCBY-NC-SA4.0协议发布,转载请保留作者署名和文章出处。Python文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质。交流群:467338606。在本文档中,我们假设读者了解Python。如果你需要学习......
  • 安卓逆向系列教程(一)Dalvik 指令集
    安卓逆向系列教程(一)Dalvik指令集作者:飞龙寄存器Dalvik指令集完全基于寄存器,也就是说,没有栈。所有寄存器都是32位,无类型的。也就是说,虽然编译器会为每个局部变量分配一个寄存器,但是理论上一个寄存器中可以存放一个int,之后存放一个String(的引用),之后再存放一个别的东西。如果要处......
  • Matplotlib 中文用户指南 3.8 路径教程
    路径教程原文:PathTutorial译者:飞龙协议:CCBY-NC-SA4.0位于所有matplotlib.patch对象底层的对象是Path,它支持moveto,lineto,curveto命令的标准几个,来绘制由线段和样条组成的简单和复合轮廓。路径由(x,y)顶点的(N,2)数组,以及路径代码的长度为N的数组实例化。例如,为了绘制(0,0)到(......