热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Vue计算属性与监视属性实现方法详解【vue入门】

最近在学习vue,学习中遇到了一些感觉挺重要的知识点,感觉有必要整理下来,这篇文章主要给大家介绍了关于Vue.js中计算属性、监视属性的相关资料,

Vue计算属性与监视属性实现方法详解

一、计算属性

在开发中,可以有这样的需求,在属性(date)中,有fistName和lastName两个属性,需要将两个属性拼接起来,这种需求也很简单,有以下实现方式

1、插值语法实现

直接在body中将两个数据拼接

    
姓:

名:

姓名:{{fistName + lastName}}

2、通过方法实现

编写一个方法,返回值为两者拼在一起的字符串

    
姓:

名:

姓名:{{fullName()}}
    new Vue({
        el:"#root",
        data:{
            fistName:"张",
            lastName:"三"
        },
        methods: {
            fullName(){
                return this.fistName + this.lastName;
            }
        },
    })

3、通过计算属性

计算属性就是vue中的computed,这里面存放的是计算属性

而data中的是属性,两者不一样

    
姓:

名:

姓名:{{fullName}}
const vm = new Vue({
        el:"#root",
        //属性
        data:{
            fistName:"张",
            lastName:"三"
        },
        // 计算属性
        computed:{
            fullName:{
                //当有人读取fullName时,get就会被调用,返回值为fullName的值
                //get调用时机
                //1、初次读取fullName
                //2、所依赖的数据变化时
                get(){
                    //这里的this是指vm
                    return this.fistName + this.lastName;
                },
                //当fullName被调用时候调用
                set(value){
                    const arr = value.split("-")
                    this.fistName = arr[0]
                    this.lastName = arr[1]
                }
            }
        }
    })

计算属性和方法的编写方式有点区别

  • {{}}中方法是写一个方法的,即带括号
  • 但是计算属性只需要写名字即可,不用带花括号

计算属性中要编写两个方法,一个是get方法,另一个是set方法

  • 当有人读取fullname这个计算属性,get方法就会被调用,返回值是fullname的值
  • 当有人修改fullname这个计算属性,set方法就会被调用

当明确只有get方法,不需要set方法的时候,计算属性可以简写成如下:

            fullName(){
                return this.fistName + this.lastName;
            }

get函数什么时候执行:

  • 初次读取时会执行一次
  • 当依赖的数据发生变化时会被调用一次

计算属性的优势

相对于方法来说,计算属性内部有缓存机制(复用),效率更好,调试更方便

简单来说,倘若计算属性不变,计算属性的数据就会存进缓存中,当页面上的其他数据需要读取这个计算属性的话,不再需要从vm获取,直接从缓存里面获取

二、监视属性

监视属性可以监视某个属性的变化,并且可以获取变化前和变化后的数值

通过关键词watch实现


  
    
    
    
    
    
  
  
    

今天天气很{{info}}

例如如上案例,当isHost被修改的时候,监视属性中的isHost中的handler就会被调用

而 immediate: true 的作用是再初始化的时候调用一下这个监视属性

注意的是监视属性必须存在,才可以进行监视

除了以上邪恶写法,还可以通过vm.$watch监视

    vm.$watch("isHost", {
      //初始化时让handler调用一下
      immediate: true,
      //什么时候调用?当isHost发生改变时
      handler(newValue, oldValue) {
        console.log("isHost被调用", newValue, oldValue);
      },
    });

两种的使用场合不同:

  • 第一个则是,一开始就很明确这个属性需要监视,则写在vue里面
  • 第二个则是,一开始不知道这个属性需要被监视,然后后面加上的,就可以用vm.$watch

当监视属性只有handler的时候,可以进行简写

watch: {
        isHot((newValue, oldValue)): {
            console.log("isHost被调用", newValue, oldValue);
        }
}        

三、深度监视

深度监视主要用于监视层次比较高的

 data: {
        isHot: true,
        number: {
          a: 1,
          b: 1,
        },
      }

例如这个data里面的number,需要监视里面的a和b的变化,则需要用到监视属性

"number.a": {
            handler(newValue, oldValue) {
              console.log("a改变", newValue, oldValue);
            },
          },

监视对象里面的某个属性,就可以如上这也进行操作,“对象.属性”表示监视里面的某一个属性

同时也可以监视number的变化,只需要在在里面开启深度即可

        number:{
          //表示深度开启
          deep:true,
          handler(){
            console.log("number发生改变");
          }

监视对象里面的某个属性,就可以如上这也进行操作,“对象.属性”表示监视里面的某一个属性

同时也可以监视number的变化,只需要在在里面开启深度即可

        number:{
          //表示深度开启
          deep:true,
          handler(){
            console.log("number发生改变");
          }

到此这篇关于Vue计算属性与监视属性实现方法详解的文章就介绍到这了,更多相关Vue计算属性与监视属性内容请搜索编程笔记以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程笔记!


推荐阅读
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 本文介绍了一些Java开发项目管理工具及其配置教程,包括团队协同工具worktil,版本管理工具GitLab,自动化构建工具Jenkins,项目管理工具Maven和Maven私服Nexus,以及Mybatis的安装和代码自动生成工具。提供了相关链接供读者参考。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
  • 网址:https:vue.docschina.orgv2guideforms.html表单input绑定基础用法可以通过使用v-model指令,在 ... [详细]
  • 用Vue实现的Demo商品管理效果图及实现代码
    本文介绍了一个使用Vue实现的Demo商品管理的效果图及实现代码。 ... [详细]
  • 本文介绍了关于Java异常的八大常见问题,包括异常管理的最佳做法、在try块中定义的变量不能用于catch或finally的原因以及为什么Double.parseDouble(null)和Integer.parseInt(null)会抛出不同的异常。同时指出这些问题是由于不同的开发人员开发所导致的,不值得过多思考。 ... [详细]
  • Hello.js 是一个用于连接OAuth2服务的JavascriptRESTFULAPI库,如Go ... [详细]
  • 移动传感器扫描覆盖摘要:关于传感器网络中的地址覆盖问题,已经做过很多尝试。他们通常归为两类,全覆盖和栅栏覆盖,统称为静态覆盖 ... [详细]
author-avatar
lkiouy_107
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有