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 获取到数据但却渲染不到页面上的解决方法
Nov 19 Vue.js
Vue与React的区别和优势对比
Dec 18 Vue.js
vue项目如何监听localStorage或sessionStorage的变化
Jan 04 Vue.js
vue 页面跳转的实现方式
Jan 12 Vue.js
如何在vue中使用HTML 5 拖放API
Jan 14 Vue.js
vue项目两种方式实现竖向表格的思路分析
Apr 28 Vue.js
vue引入Excel表格插件的方法
Apr 28 Vue.js
Vue3.0 手写放大镜效果
Jul 25 Vue.js
详解Vue slot插槽
Nov 20 Vue.js
VUE使用draggable实现组件拖拽
Apr 06 Vue.js
el-table-column 内容不自动换行的解决方法
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
PHP基于imap获取邮件实例
2014/11/11 PHP
PHP实现的文件操作类及文件下载功能示例
2016/12/24 PHP
日期处理的js库(迷你版)--自建js库总结
2011/11/21 Javascript
文本框(input)获取焦点(onfocus)时样式改变的示例代码
2014/01/10 Javascript
jQuery实现可编辑表格并生成json结果(实例代码)
2017/07/19 jQuery
JavaScript惰性求值的一种实现方法示例
2019/01/11 Javascript
手把手带你封装一个vue component第三方库
2019/02/14 Javascript
Node爬取大批量文件的方法示例
2019/06/28 Javascript
[02:40]DOTA2超级联赛专访430 从小就爱玩对抗性游戏
2013/06/18 DOTA
Python使用稀疏矩阵节省内存实例
2014/06/27 Python
使用简单工厂模式来进行Python的设计模式编程
2016/03/01 Python
Python内置函数——__import__ 的使用方法
2017/11/24 Python
selenium+python自动化测试之页面元素定位
2019/01/23 Python
详解python--模拟轮盘抽奖游戏
2019/04/12 Python
Python语法分析之字符串格式化
2019/06/13 Python
对Python生成器、装饰器、递归的使用详解
2019/07/19 Python
Anconda环境下Vscode安装Python的方法详解
2020/03/29 Python
Python xlrd模块导入过程及常用操作
2020/06/10 Python
python/golang 删除链表中的元素
2020/09/14 Python
Python实现简单猜数字游戏
2021/02/03 Python
python网络爬虫实现发送短信验证码的方法
2021/02/25 Python
canvas实现有递增动画的环形进度条的实现方法
2019/07/10 HTML / CSS
html5中嵌入视频自动播放的问题解决
2020/05/25 HTML / CSS
纽约著名的服装辅料来源:M&J Trimming
2017/07/26 全球购物
怀俄明州飞钓:Platte River Fly Shop
2017/12/28 全球购物
英国男士时尚网站:Dandy Fellow
2018/02/09 全球购物
纽约手袋品牌:KARA
2018/03/18 全球购物
世界汽车零件:World Car Parts
2019/09/04 全球购物
企业项目策划书
2014/01/11 职场文书
高中美术教学反思
2014/01/19 职场文书
大学生咖啡店创业计划书
2014/01/21 职场文书
文秘大学生求职信
2014/02/25 职场文书
小学一年级评语大全
2014/04/22 职场文书
农业开发项目建议书
2014/05/16 职场文书
小学班主任评语
2014/12/29 职场文书
慰问信范文
2015/02/14 职场文书