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的mixin策略
Nov 19 Vue.js
vue 获取到数据但却渲染不到页面上的解决方法
Nov 19 Vue.js
浅析VUE防抖与节流
Nov 24 Vue.js
Vue.js桌面端自定义滚动条组件之美化滚动条VScroll
Dec 01 Vue.js
如何实现vue的tree组件
Dec 03 Vue.js
详解如何在vue+element-ui的项目中封装dialog组件
Dec 11 Vue.js
Vue+Bootstrap实现简易学生管理系统
Feb 09 Vue.js
WebStorm无法正确识别Vue3组合式API的解决方案
Feb 18 Vue.js
Vue中插槽slot的使用方法与应用场景详析
Jun 08 Vue.js
Vue全局事件总线你了解吗
Feb 24 Vue.js
vue中控制mock在开发环境使用,在生产环境禁用方式
Apr 06 Vue.js
vue递归实现树形组件
Jul 15 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 cli模式学习(PHP命令行模式)
2013/06/03 PHP
PHP SplObjectStorage使用实例
2015/05/12 PHP
javascript Base类 包含基本的方法
2009/07/22 Javascript
jquery 弹出层注册页面等(asp.net后台)
2010/06/17 Javascript
js下获得客户端操作系统的函数代码(1:vista,2:windows7,3:2000,4:xp,5:2003,6:2008)
2011/10/31 Javascript
将查询条件的input、select清空
2014/01/14 Javascript
Seajs的学习笔记
2014/03/04 Javascript
JS数组合并push与concat区别分析
2015/12/17 Javascript
js利用appendChild对标签进行排序的实现方法
2016/10/16 Javascript
Linux CentOS系统下安装node.js与express的方法
2017/04/01 Javascript
js时间查询插件使用详解
2017/04/07 Javascript
AngularJS实现tab选项卡的方法详解
2017/07/05 Javascript
AngularJS中使用three.js的实例详解
2017/07/21 Javascript
vue+SSM实现验证码功能
2018/12/07 Javascript
AjaxFileUpload.js实现异步上传文件功能
2019/04/19 Javascript
开源一个微信小程序仪表盘组件过程解析
2019/07/30 Javascript
[01:15:15]VG VS EG Supermajor小组赛B组胜者组第一轮 BO3第二场 6.2
2018/06/03 DOTA
Python正则表达式使用范例分享
2016/12/04 Python
使用TensorFlow实现简单线性回归模型
2019/07/19 Python
Python测试Kafka集群(pykafka)实例
2019/12/23 Python
TensorFlow2.0:张量的合并与分割实例
2020/01/19 Python
Python3 读取Word文件方式
2020/02/13 Python
在django中查询获取数据,get, filter,all(),values()操作
2020/08/09 Python
python 自动识别并连接串口的实现
2021/01/19 Python
倩碧澳大利亚官网:Clinique澳大利亚
2019/07/22 全球购物
新浪网技术部笔试题
2016/08/26 面试题
致跳高运动员广播稿
2014/01/13 职场文书
终止劳动合同协议书
2014/04/14 职场文书
创建青年文明号材料
2014/05/09 职场文书
运动会拉拉队口号
2014/06/09 职场文书
2014年消防工作总结
2014/11/21 职场文书
升职自荐信范文
2015/03/27 职场文书
初中教师德育工作总结2015
2015/05/12 职场文书
2015年林业工作总结
2015/05/14 职场文书
学历证明范文
2015/06/16 职场文书
班干部学习委员竞选稿
2015/11/20 职场文书