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+iview实现分页及查询功能
Nov 17 Vue.js
vue动态合并单元格并添加小计合计功能示例
Nov 26 Vue.js
基于vue项目设置resolves.alias: '@'路径并适配webstorm
Dec 02 Vue.js
Vue+scss白天和夜间模式切换功能的实现方法
Jan 05 Vue.js
vue-quill-editor插入图片路径太长问题解决方法
Jan 08 Vue.js
vue3.0中使用element的完整步骤
Mar 04 Vue.js
手写Vue2.0 数据劫持的示例
Mar 04 Vue.js
详解Vue的options
May 15 Vue.js
Vue实现导入Excel功能步骤详解
Jul 03 Vue.js
详解Vue router路由
Nov 20 Vue.js
vue中的可拖拽宽度div的实现示例
Apr 08 Vue.js
vue elementUI批量上传文件
Apr 26 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
免费的ip数据库淘宝IP地址库简介和PHP调用实例
2014/04/08 PHP
短信提示使用 特效
2007/01/19 Javascript
jquery仿百度百科底部浮动导航特效
2015/08/08 Javascript
Javascript的动态增加类的实现方法
2016/10/20 Javascript
用js控件div的滚动条,让它在内容更新时自动滚到底部的实现方法
2016/10/27 Javascript
JS封装通过className获取元素的函数示例
2016/12/20 Javascript
微信小程序 Nginx环境配置详细介绍
2017/02/14 Javascript
详解nodejs微信jssdk后端接口
2017/05/25 NodeJs
详谈js模块化规范
2017/07/07 Javascript
关于vue.extend和vue.component的区别浅析
2017/08/16 Javascript
VUE中的无限循环代码解析
2017/09/22 Javascript
vue系列之requireJs中引入vue-router的方法
2018/07/18 Javascript
浅谈微信小程序之官方UI框架we-ui使用教程
2018/08/20 Javascript
深入理解移动前端开发之viewport
2018/10/19 Javascript
vuedraggable+element ui实现页面控件拖拽排序效果
2020/07/29 Javascript
vue下的@change事件的实现
2019/10/25 Javascript
vue 解决provide和inject响应的问题
2020/11/12 Javascript
[00:37]DOTA2上海特级锦标赛 Secert 战队宣传片
2016/03/03 DOTA
Linux下使用python调用top命令获得CPU利用率
2015/03/10 Python
python学习之编写查询ip程序
2016/02/27 Python
Python实现 多进程导入CSV数据到 MySQL
2017/02/26 Python
Python切片操作实例分析
2018/03/16 Python
python爬虫 使用真实浏览器打开网页的两种方法总结
2018/04/21 Python
python实现任意位置文件分割的实例
2018/12/14 Python
使用Python对Dicom文件进行读取与写入的实现
2020/04/20 Python
Python用来做Web开发的优势有哪些
2020/08/05 Python
python 录制系统声音的示例
2020/12/21 Python
CSS3文本换行word-wrap解决英文文本超过固定宽度不换行
2013/10/10 HTML / CSS
ECCO爱步官方旗舰店:丹麦鞋履品牌
2018/01/02 全球购物
美国价格实惠的在线眼镜网站:Zeelool
2020/12/25 全球购物
司机辞职报告范文
2014/01/20 职场文书
2015年公务员工作总结
2015/04/24 职场文书
化妆品促销活动总结
2015/05/07 职场文书
学会感恩主题班会
2015/08/12 职场文书
Python中递归以及递归遍历目录详解
2021/10/24 Python
django项目、vue项目部署云服务器的详细过程
2022/07/23 Servers