vue 计算属性和侦听器的使用小结


Posted in Vue.js onJanuary 25, 2021

1. 计算属性和侦听器

1.1 计算属性

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">   
    <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
  </head>
  <body>
    <div id="app">
			<p>{{ message }}</p>
			<p>{{ reversedMessage }}</p>
    </div>
    <script>
      new Vue({
        el: '#app',
        data: {
					message: 'hello'
        },
				computed: {					
					reversedMessage: function () {
						return this.message.split('').reverse().join('')
					}
					/*
					// 相当于
					reversedMessage: {
						get(){
							return this.message.split('').reverse().join('')
						}
					}
					*/
				}
      });
    </script>
  </body>
</html>

vue 计算属性和侦听器的使用小结

解释:我们在属性computed中定义了计算属性reversedMessage,这里提供的函数将作为计算属性reversedMessage的getter函数。

1.2 setter

计算属性默认只有getter,不过我们可以提供一个setter。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">   
    <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
  </head>
  <body>
    <div id="app">
			<p>{{ message }}</p>
			<p>{{ reversedMessage }}</p>
			<input type="text" v-model="reversedMessage" />
    </div>
    <script>
      new Vue({
        el: '#app',
        data: {
					message: 'hello'
        },
				computed: {
					reversedMessage: {
						get(){
							return this.message.split('').reverse().join('')
						},
						set(value){
							this.message = value.split('').reverse().join('')
						}
					}
				}
      });
    </script>
  </body>
</html>

1.3 缓存

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">   
    <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
  </head>
  <body>
    <div id="app">
			<p>{{ message }}</p>
			<p>{{ reversedMessage }}</p>
			<p>{{ reversedMessage1() }}</p>
    </div>
    <script>
      new Vue({
        el: '#app',
        data: {
					message: 'hello'
        },
				methods: {
					reversedMessage1: function(){
						return this.message.split('').reverse().join('')
					}
				},
				computed: {					
					reversedMessage: function () {
						return this.message.split('').reverse().join('')
					}
				}
      });
    </script>
  </body>
</html>

vue 计算属性和侦听器的使用小结

注意:虽然通过计算属性和方法,都可以达到同样的效果,但是计算属性是基于它们的响应式依赖进行缓存的。只在相关响应式依赖发生改变时它们才会重新求值。

1.4 侦听属性

通过Vue实例的watch属性可以侦听数据的变化。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">   
    <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
  </head>
  <body>
    <div id="app">
			<p>{{ message }}</p>
			<button @click="reverse=!reverse">反转</button>
    </div>
    <script>
      new Vue({
        el: '#app',
        data: {
					message: 'Vue',
					reverse: false
        },
				watch: {
					// message: function(newVal, oldVal){
					reverse: function(newVal){
						console.log(newVal)
						this.message = this.message.split('').reverse().join('')
					}
				},
      });
    </script>
  </body>
</html>

我们可以通过实例属性vm.$watch达到同样的效果。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">   
    <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
  </head>
  <body>
    <div id="app">
			<p>{{ message }}</p>
			<button @click="reverse=!reverse">反转</button>
    </div>
    <script>
      var vm = new Vue({
        el: '#app',
        data: {
					message: 'Vue',
					reverse: false
        }
      });
			
			// vm.$watch('reverse', function (newVal, oldVal) {
			vm.$watch('reverse', function (newVal) {
				console.log(newVal)
				this.message = this.message.split('').reverse().join('')
			});
    </script>
  </body>
</html>

以上就是vue 计算属性和侦听器的使用小结的详细内容,更多关于vue 计算属性和侦听器的资料请关注三水点靠木其它相关文章!

Vue.js 相关文章推荐
vue实现购物车的小练习
Dec 21 Vue.js
梳理一下vue中的生命周期
Dec 30 Vue.js
Vue仿Bibibili首页的问题
Jan 21 Vue.js
vue 计算属性和侦听器的使用小结
Jan 25 Vue.js
Vue 数据响应式相关总结
Jan 28 Vue.js
vue打开新窗口并实现传参的图文实例
Mar 04 Vue.js
vue项目两种方式实现竖向表格的思路分析
Apr 28 Vue.js
如何使用vue3打造一个物料库
May 08 Vue.js
一篇文章告诉你如何实现Vue前端分页和后端分页
Feb 18 Vue.js
详解Vue中$props、$attrs和$listeners的使用方法
Feb 18 Vue.js
如何vue使用el-table遍历循环表头和表体数据
Apr 26 Vue.js
vue实现input输入模糊查询的三种方式
Aug 14 Vue.js
vue keep-alive的简单总结
Jan 25 #Vue.js
vue form表单post请求结合Servlet实现文件上传功能
Jan 22 #Vue.js
Vue 集成 PDF.js 实现 PDF 预览和添加水印的步骤
Jan 22 #Vue.js
Vue仿Bibibili首页的问题
Jan 21 #Vue.js
如何在vue 中使用柱状图 并自修改配置
Jan 21 #Vue.js
Vue看了就会的8个小技巧
Jan 21 #Vue.js
浅谈Vue开发人员的7个最好的VSCode扩展
Jan 20 #Vue.js
You might like
基于Discuz security.inc.php代码的深入分析
2013/06/03 PHP
linux环境apache多端口配置虚拟主机的方法深入介绍
2013/06/09 PHP
php常用Output和ptions/Info函数集介绍
2013/06/19 PHP
php和html的区别点详细总结
2019/09/24 PHP
imagettftext() 失效,不起作用
2021/03/09 PHP
向左滚动文字 js代码效果
2013/08/17 Javascript
jquery索引在使用中的一些困惑
2013/10/24 Javascript
js获取元素相对窗口位置的实现代码
2014/09/28 Javascript
node.js Sequelize实现单实例字段或批量自增、自减
2016/12/08 Javascript
jQuery实现花式轮播之圣诞节礼物传送效果
2016/12/25 Javascript
详解vue-router基本使用
2017/04/18 Javascript
underscore之Chaining_动力节点Java学院整理
2017/07/10 Javascript
JQuery 又谈ajax局部刷新
2017/11/27 jQuery
django使用channels2.x实现实时通讯
2018/11/28 Javascript
Three.js实现3D机房效果
2018/12/30 Javascript
JS获取表格视图所选行号的ids过程解析
2020/02/21 Javascript
vue+vant使用图片预览功能ImagePreview的问题解决
2020/04/10 Javascript
利用一个简单的例子窥探CPython内核的运行机制
2015/03/30 Python
Python实现网站注册验证码生成类
2017/06/08 Python
python 通过logging写入日志到文件和控制台的实例
2018/04/28 Python
详解Python3序列赋值、序列解包
2019/05/14 Python
python 实现矩阵填充0的例子
2019/11/29 Python
将python依赖包打包成window下可执行文件bat方式
2019/12/26 Python
Python selenium使用autoIT上传附件过程详解
2020/05/26 Python
Python random模块的使用示例
2020/10/10 Python
在Python中字典按值排序的实现方法
2020/11/12 Python
CSS3制作气泡对话框的实例教程
2016/05/10 HTML / CSS
澳大利亚实惠时尚女装商店:Katies
2019/06/16 全球购物
英语课前三分钟演讲稿
2014/08/19 职场文书
党的群众路线整改落实情况汇报
2014/10/28 职场文书
优秀学生干部事迹材料
2014/12/24 职场文书
最新农村养殖致富:资金投入较低的创业项目有哪些?
2019/09/26 职场文书
Python-OpenCV实现图像缺陷检测的实例
2021/06/11 Python
Mysql Innodb存储引擎之索引与算法
2022/02/15 MySQL
船舶调度指挥系统——助力智慧海事
2022/02/18 无线电
mysql查询结果实现多列拼接查询
2022/04/03 MySQL