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 +WebSocket + WaveSurferJS 实现H5聊天对话交互的实例
Nov 18 Vue.js
vue祖孙组件之间的数据传递案例
Dec 07 Vue.js
Vue实现点击当前行变色
Dec 14 Vue.js
Vue实现简易购物车页面
Dec 30 Vue.js
vue中activated的用法
Jan 03 Vue.js
通过vue.extend实现消息提示弹框的方法记录
Jan 07 Vue.js
原生JS封装vue Tab切换效果
Apr 28 Vue.js
vue使用v-model进行跨组件绑定的基本实现方法
Apr 28 Vue.js
vue实现水波涟漪效果的点击反馈指令
May 31 Vue.js
Vue3中的Refs和Ref详情
Nov 11 Vue.js
vue实现移动端div拖动效果
Mar 03 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
根据中文裁减字符串函数的php代码
2013/12/03 PHP
PHP+Mysql实现多关键字与多字段生成SQL语句的函数
2014/11/05 PHP
php实现通过soap调用.Net的WebService asmx文件
2017/02/27 PHP
for 循环性能比较 提高for循环的效率
2009/03/19 Javascript
Prototype Date对象 学习
2009/07/12 Javascript
JavaScript将字符串转换为整数的方法
2015/04/14 Javascript
javascript表格的渲染组件
2015/07/03 Javascript
JavaScript中Function函数与Object对象的关系
2015/12/17 Javascript
Javascript中获取浏览器类型和操作系统版本等客户端信息常用代码
2016/06/28 Javascript
javascript特殊文本输入框网页特效
2016/09/13 Javascript
JavaScript中return用法示例
2016/11/29 Javascript
jQuery实现立体式数字动态增加(animate方法)
2016/12/21 Javascript
js控制文本框禁止输入特殊字符详解
2017/04/07 Javascript
Vuejs实现购物车功能
2017/11/05 Javascript
vue项目中的webpack-dev-sever配置方法
2017/12/14 Javascript
Angular简单验证功能示例
2017/12/22 Javascript
jQuery滑动效果实现方法分析
2018/09/05 jQuery
mongodb初始化并使用node.js实现mongodb操作封装方法
2019/04/02 Javascript
解决Layui数据表格的宽高问题
2019/09/28 Javascript
微信小程序基于movable-view实现滑动删除效果
2020/01/08 Javascript
通过实例解析JavaScript for in及for of区别
2020/06/15 Javascript
浅谈Python 字符串格式化输出(format/printf)
2016/07/21 Python
python使用tkinter库实现五子棋游戏
2019/06/18 Python
Python中list的交、并、差集获取方法示例
2019/08/01 Python
Python适配器模式代码实现解析
2019/08/02 Python
使用python实现男神女神颜值打分系统(推荐)
2019/10/31 Python
python 插入日期数据到Oracle实例
2020/03/02 Python
Django通过json格式收集主机信息
2020/05/29 Python
使用HTML5 Geolocation实现一个距离追踪器
2018/04/09 HTML / CSS
美国唇部护理专家:Sara Happ
2019/06/19 全球购物
实习自荐信
2013/10/13 职场文书
化验室岗位职责
2015/02/14 职场文书
2015夏季作息时间调整通知
2015/04/24 职场文书
英语读书笔记
2015/07/02 职场文书
Python实现批量自动整理文件
2022/03/16 Python
Tomcat弱口令复现及利用
2022/05/06 Servers