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 01 Vue.js
vue+element_ui上传文件,并传递额外参数操作
Dec 05 Vue.js
vue-router定义元信息meta操作
Dec 07 Vue.js
vue浏览器返回监听的具体步骤
Feb 03 Vue.js
vue中h5端打开app(判断是安卓还是苹果)
Feb 26 Vue.js
Vue通过懒加载提升页面响应速度
May 10 Vue.js
深入理解Vue的数据响应式
May 15 Vue.js
详细聊聊vue中组件的props属性
Nov 02 Vue.js
vue中this.$http.post()跨域和请求参数丢失的解决
Apr 08 Vue.js
vue组件vue-esign实现电子签名
Apr 21 Vue.js
vue 自定义组件添加原生事件
Apr 21 Vue.js
vue实现在data里引入相对路径
Jun 05 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 中的一些经验积累
2006/10/09 PHP
Discuz 6.0+ 批量注册用户名
2009/09/13 PHP
php 常用算法和时间复杂度
2013/07/01 PHP
PHP连接access数据库
2015/03/27 PHP
开启PHP的伪静态模式
2015/12/31 PHP
使用phpexcel类实现excel导入mysql数据库功能(实例代码)
2016/05/12 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
2016/11/12 PHP
完美解决Thinkphp3.2中插入相同数据的问题
2017/08/01 PHP
PHP实现使用DOM将XML数据存入数组的方法示例
2017/09/27 PHP
使用laravel指定日志文件记录任意日志
2019/10/17 PHP
javascript中callee与caller的区别分析
2015/04/20 Javascript
angularJS深拷贝详解
2017/03/23 Javascript
JS触摸事件、手势事件详解
2017/05/04 Javascript
ES6新特性之类(Class)和继承(Extends)相关概念与用法分析
2017/05/24 Javascript
Bootstrap栅格系统的使用详解
2017/10/30 Javascript
详解mpvue开发小程序小总结
2018/07/25 Javascript
JavaScript中创建原子的方法总结
2018/08/26 Javascript
详解如何构建一个Angular6的第三方npm包
2018/09/07 Javascript
angular6 填坑之sdk的方法
2018/12/27 Javascript
React+Redux实现简单的待办事项列表ToDoList
2019/09/29 Javascript
使用JavaScript获取Django模板指定键值数据
2020/05/27 Javascript
Python实现去除列表中重复元素的方法小结【4种方法】
2018/04/27 Python
在python里创建一个任务(Task)实例
2020/04/25 Python
Django 实现 Websocket 广播、点对点发送消息的代码
2020/06/03 Python
Python txt文件常用读写操作代码实例
2020/08/03 Python
详解FireFox下Canvas使用图像合成绘制SVG的Bug
2019/07/10 HTML / CSS
移动端html5模拟长按事件的实现方法
2018/09/30 HTML / CSS
德国网上药房:Apotal
2017/04/04 全球购物
Doyoueven官网:澳大利亚健身服饰和配饰品牌
2019/03/24 全球购物
党校自我鉴定范文
2013/10/02 职场文书
优秀小学生家长评语
2014/01/30 职场文书
阳光体育活动总结
2014/04/30 职场文书
致800米运动员广播稿(10篇)
2014/10/17 职场文书
市场营销计划书
2015/01/17 职场文书
Golang: 内建容器的用法
2021/05/05 Golang
使用pd.merge表连接出现多余行的问题解决
2022/06/16 Python