Vue的计算属性:methods方法、computed计算属性、watch监听属性

本文主要是介绍Vue的计算属性:methods方法、computed计算属性、watch监听属性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、methods 方法

在创建的 Vue 应用程序实例中,可以通过 methods 选项定义方法。应用程序实例本身会代理 methods 选项中的所有方法,因此可以像访问 data 数据那样来调用方法。

【实例】在 Vue 应用程序中,使用 methods 选项定义获取用户信息方法和乘法计算方法。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="author" content="pan_junbiao的博客"><title>Vue实例</title>
</head><body><div id="app"><p>用户ID:{{userInfo.userId}}</p><p>用户名称:{{userInfo.userName}}</p><p>博客信息:{{userInfo.blogName}}</p><p>博客地址:{{userInfo.blogUrl}}</p><p>{{num1}} 乘以 {{num2}} 的结果:{{ multiplicine(num1, num2) }}</p></div>
</body><!-- 引入 Vue 框架 -->
<script src="../js/vue.global.js"></script><script type="text/javascript">//使用 Vue.createApp 函数创建一个应用程序实例const vueApp = Vue.createApp({//数据data() {return {userInfo: {}, //定义用户对象num1: 20,num2: 40}},//初始化的入口created: function () {//调用方法:获取用户信息this.getUserInfo();},//方法methods: {//获取用户信息getUserInfo: function () {this.userInfo = {userId: 1,userName: "pan_junbiao的博客",blogName: "您好,欢迎访问 pan_junbiao的博客",blogUrl: "https://blog.csdn.net/pan_junbiao"}},//乘法计算multiplicine: function (a, b) {return a * b;}}//使用 mount() 方法,装载应用程序实例的根组件}).mount('#app'); 
</script></html>

执行结果:

2、computed 计算属性

在模板中绑定表达式只能用于简单的运算。如果运算比较复杂,可以使用 Vue.js 提供的计算属性,通过计算属性可以处理比较复杂的逻辑。

2.1 计算属性的应用

通过计算属性可以实现各种复杂的逻辑,包括运算、函数调用等,只要最后返回一个计算结果就可以。当计算属性依赖的数据发生变化时,计算属性的值会自动更新,所有依赖该计算属性的数据绑定也会同步进行更新。

【实例】使用 computed 计算属性,实现每个单词首字母大写。

<body><div id="app"><p>原字符串:{{str}}</p><p>新字符串:{{newstr}}</p></div>
</body><!-- 引入 Vue 框架 -->
<script src="../js/vue.global.js"></script><script type="text/javascript">//使用 Vue.createApp 函数创建一个应用程序实例const vueApp = Vue.createApp({//数据data() {return {str:"my heart will go on"}},//计算属性computed: {//首字母大写newstr: function(){let arr = this.str.split(' ');for(let i = 0; i < arr.length; i++){arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].substr(1).toLowerCase();}return arr.join(' ');}}//使用 mount() 方法,装载应用程序实例的根组件}).mount('#app'); 
</script>

执行结果:

2.2 计算属性的 getter 和 setter

每一个计算属性都包含一个 getter 和一个 setter。getter 只要用来读取值,而 setter 主要用来设置值。getter 主要用来读取值,而 setter 主要用来设置值。当手动更新计算属性的值时,就会触发 setter,执行一些自定义的操作。

【实例】使用 计算属性的 getter 和 setter,重新设置人物姓名。

<body><div id="app"><p>人物名称:{{fullname}}</p></div>
</body><!-- 引入 Vue 框架 -->
<script src="../js/vue.global.js"></script><script type="text/javascript">//使用 Vue.createApp 函数创建一个应用程序实例const vueApp = Vue.createApp({//数据data() {return {surname: 'Jim',lastname: 'Carrey'}},//计算属性computed: {fullname: {// getterget() {return this.surname + ' ' + this.lastname;},// setterset(value) {let names = value.split(' ');this.surname = names[0];this.lastname = names[1];}}}//使用 mount() 方法,装载应用程序实例的根组件}).mount('#app');//重新设置人物名称vueApp.fullname = 'Will Smith';
</script>

执行结果:

2.3 methods 与 computed 的区别

问:Vue 中的 methods 方法与 computed 计算属性有什么区别?

答:主要区别是 methods 方法会实时计算,而 computed 计算属性是使用缓存数据。

将相同的操作定义为一个方法,或者定义为一个计算属性,两种方式的结果完全相同。那么为什么还需要计算属性呢?因为计算属性是基于它们的依赖进行缓存的。当页面重新渲染时,如果依赖的数据未发生改变,使用计算属性获取的值就是一直是缓存值。只有依赖的数据发生改变时才会重新获取值。如果使用的是方法,在页面重新渲染时,方法中的函数总会被重新调用。

详情请浏览本博客的文章:《Vue中的methods方法与computed计算属性的区别》

3、watch 监听属性

监听属性是 Vue.js 提供的一种用来监听和响应数据变化的方式。在 监听 data 选项中的属性时,如果监听的属性发生变化,就会执行特定的操作。

3.1 监听属性的使用

监听属性可以定义在 watch 选项中。监听属性对应的函数可以接收一个或两个参数。如果只有一个参数,则该参数表示监听属性的新值;如果有两个参数,第一个参数表示监听属性的新值,第二个参数表示监听属性的原值。

【实例】在 watch 选项中定义监听属性,输出属性的原值和新值。

<body><div id="app"><p>商品名称:{{name}}</p><p>{{text}}</p></div>
</body><!-- 引入 Vue 框架 -->
<script src="../js/vue.global.js"></script><script type="text/javascript">//使用 Vue.createApp 函数创建一个应用程序实例const vueApp = Vue.createApp({//数据data() {return {name: '华为手机',price: 6999,text: ''}},//监听watch: {price(newValue, oldValue) {this.text = `原价格:${oldValue}元,新价格:${newValue}元`;}}//使用 mount() 方法,装载应用程序实例的根组件}).mount('#app');//修改属性值vueApp.price = 3999;
</script>

执行结果:

3.2 监听属性的应用场景

监听属性通常用来实现数据之间的换算,如长度单位之间的换算、速度单位之间的换算、汇率之间的换算等。

【实例】使用 watch 监听属性,实现速度单位之间的换算。

<body><div id="app"><label for="meter">米/秒:</label><input id="meter" type="number" v-model="meter"><p><label for="kilometer">千米/小时:</label><input id="kilometer" type="number" v-model="kilometer"><p>{{meter}}米/秒={{kilometer}}千米/小时</div>
</body><!-- 引入 Vue 框架 -->
<script src="../js/vue.global.js"></script><script type="text/javascript">//使用 Vue.createApp 函数创建一个应用程序实例const vueApp = Vue.createApp({//数据data() {return {meter : 0,kilometer : 0}},//监听watch : {meter : function(val){this.kilometer = val * 3600 / 1000;},kilometer : function(val){this.meter = val * 1000 / 3600;}}//使用 mount() 方法,装载应用程序实例的根组件}).mount('#app');
</script>

执行结果:

3.3 监听对象

如果要监听的属性值是一个对象,要想监听对象内部值的变化,需要在监听属性的选项参数中设置 deep 选项的值为 true。

【实例】使用 watch 监听属性,监听对象的属性。

<body><div id="app"></div>
</body><!-- 引入 Vue 框架 -->
<script src="../js/vue.global.js"></script><script type="text/javascript">//使用 Vue.createApp 函数创建一个应用程序实例const vueApp = Vue.createApp({//数据data() {return {userInfo: {userId: 1,userName: "pan_junbiao的博客",blogName: "您好,欢迎访问 pan_junbiao的博客",blogUrl: "https://blog.csdn.net/pan_junbiao",position: '前端工程师'}}},//监听watch : {userInfo:{handler: function(newValue){alert(`用户名称:${newValue.userName}\n新的职位:${newValue.position}\n博客信息:${newValue.blogName}\n博客地址:${newValue.blogUrl}`);},deep: true //重点代码}}//使用 mount() 方法,装载应用程序实例的根组件}).mount('#app');//修改对象中的属性值vueApp.userInfo.position = "Java工程师";
</script>

执行结果:

注意:

当监听的数据是一个数组或者对象时,回调函数中的新值和旧值是相等的,因为这两个形参指向的是同一个数据对象。

3.4 computed 与 watch 的比较

computed 计算属性与 watch 监听属性的比较:

简体属性是 Vue.js 提供的一种用于监测和响应数据变化的更通用的方式。但是,使用监听属性的方式编写的代码是命令式的重复代码,所以在一般情况中,更好的做法是使用计算属性而不是命令式的监听属性。

4、filters 过滤器

关于 Vue.js 中的 filters 过滤器:从 Vue 3.0 版本开始,已被删除。Vue 3.0 为了精简与优化代码,删除了 filters 过滤器,因为 methods 方法和 computed 计算属性也能够实现 filters 过滤器的功能。

这篇关于Vue的计算属性:methods方法、computed计算属性、watch监听属性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1104941

相关文章

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

判断PyTorch是GPU版还是CPU版的方法小结

《判断PyTorch是GPU版还是CPU版的方法小结》PyTorch作为当前最流行的深度学习框架之一,支持在CPU和GPU(NVIDIACUDA)上运行,所以对于深度学习开发者来说,正确识别PyTor... 目录前言为什么需要区分GPU和CPU版本?性能差异硬件要求如何检查PyTorch版本?方法1:使用命

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll

Java中的工具类命名方法

《Java中的工具类命名方法》:本文主要介绍Java中的工具类究竟如何命名,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java中的工具类究竟如何命名?先来几个例子几种命名方式的比较到底如何命名 ?总结Java中的工具类究竟如何命名?先来几个例子JD

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依

python获取网页表格的多种方法汇总

《python获取网页表格的多种方法汇总》我们在网页上看到很多的表格,如果要获取里面的数据或者转化成其他格式,就需要将表格获取下来并进行整理,在Python中,获取网页表格的方法有多种,下面就跟随小编... 目录1. 使用Pandas的read_html2. 使用BeautifulSoup和pandas3.

Spring 中的循环引用问题解决方法

《Spring中的循环引用问题解决方法》:本文主要介绍Spring中的循环引用问题解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录什么是循环引用?循环依赖三级缓存解决循环依赖二级缓存三级缓存本章来聊聊Spring 中的循环引用问题该如何解决。这里聊

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Pandas统计每行数据中的空值的方法示例

《Pandas统计每行数据中的空值的方法示例》处理缺失数据(NaN值)是一个非常常见的问题,本文主要介绍了Pandas统计每行数据中的空值的方法示例,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是空值?为什么要统计空值?准备工作创建示例数据统计每行空值数量进一步分析www.chinasem.cn处