初识Vue——计算属性和观察者
一、计算属性
在模板内使用
1、基础例子
<template>
<div class="main">
<div id="reverse_str">
<p>原始字符串:{{ msg }}</p>
<p>倒置字符串:{{ reversedmsg }}</p>
</div>
</div>
</template> <script>
export default {
name: 'test',
data () {
return {
msg: '梦里梦到醒不来的梦',
}
},
computed: {
//计算属性的getter
reversedmsg: function () {
return this.msg.split('').reverse().join('')
}
}
}
</script> <style>
#reverse_str{
color: powderblue;
}
</style>
解释说明:这里我们声明了一个计算属性reversemsg,我们提供的函数将用作属性的getter函数
2、计算属性缓存vs方法
以上还可以通过在表达式中调用方法来达到同样的效果:
<template>
<div class="main">
<div id="method">
<p>原始字符串:{{ msg1 }}</p>
<p>倒置字符串:{{ reversedmsg1() }}</p>
</div>
</div>
</template> <script>
export default {
name: 'test',
data () {
return {
msg1: '浮现你被软禁的红'
}
},
methods: {
reversedmsg1 () {
return this.msg.split('').reverse().join('')
}
}
}
</script> <style>
#method{
color: darksalmon;
}
</style>
这两种方式的结果是一模一样的;不同的是,计算属性是基于他们的依赖进行缓存的;计算属性只有在他的相关依赖发生改变时,才会重新求值;这就意味着只要msg没有发生改变,多次访问reversemsg计算属性会立即返回之前计算的结果,而不必再次执行函数;
这也意味着下面的计算属性将不再更新,因为Date.now()不是响应式依赖,
computed: {
// 计算属性的getter
now_time: function () {
return Date.now()
}
},
3、计算属性VS侦听属性
侦听属性:观察和相应Vue实例上的数据变动;watch回调
<template>
<div class="main">
<div id="sang">
<div class="watch_it">
<input v-model="first" />
<input v-model="last" />
<p>{{ fullname }}</p>
</div>
</div>
</div>
</template> <script>
export default {
name: 'test',
data () {
return {
sangname: '我如果爱你——',
author: '绝不学痴情的鸟儿,为绿荫重复单调的歌曲',
}
},
watch: {
first: function (val) {
this.fullname = val + ' ' + this.last
},
last: function (val) {
this.fullname = this.first + ' ' + val
}
}
}
</script> <style>
.watch_it input{
list-style: none;border: 1px seagreen solid;width: 200px;height:30px;color: gray;padding:0 10px;outline: none;
}
</style>
上面的代码是命令式的,且重复代码较多,下面来写一下计算属性的版本:
<template>
<div class="main">
<div id="sang">
<p>{{ sang }}</p>
</div>
</div>
</template> <script>
export default {
name: 'test',
data () {
return {
sangname: '我如果爱你——',
author: '绝不学痴情的鸟儿,为绿荫重复单调的歌曲',
},
computed: {
// 计算属性的getter
sang: function () {
return this.sangname + ' ' + this.author
}
}
}
</script> <style>
#sang{
color: cadetblue;
}
</style>
4、计算属性的setter
计算属性只有默认的getter,不过在必要的时候你可以自定义一个setter
<template>
<div class="main">
<div id="sang">
<p>{{ sang }}</p>
</div>
</div>
</template> <script>
export default {
name: 'test',
data () {
return {
sangname: '我如果爱你——',
author: '绝不学痴情的鸟儿,为绿荫重复单调的歌曲',
}
},
computed: {
sang: {
//getter
get: function () {
return this.sangname + ' ' + this.author
},
set: function (newval) {
var sentence = newval.split(' ')
this.sangname = sentence[0]
this.author = sentence[sentence.length - 1]
}
}
}
}
</script> <style>
#sang{
color: cadetblue;
}
</style>
二、侦听器
虽然计算机属性可以适用于大多数情况,但有时也需要一个自定义的侦听器;
暂无
初识Vue——计算属性和观察者的更多相关文章
- vue计算属性和观察者
1. 计算属性 模板内的表达式非常便利,但在模板中放入太多的逻辑会让模板过重且难以维护,所有就有了计算属性 例子: //html代码 <div id="example"> ...
- 前端MVC Vue2学习总结(三)——模板语法、过滤器、计算属性、观察者、Class 与 Style 绑定
Vue.js 使用了基于 HTML 的模版语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据.所有 Vue.js 的模板都是合法的 HTML ,所以能被遵循规范的浏览器和 HTML 解 ...
- 七、vue计算属性
细节流程图 初始化 计算属性的初始化是发生在 Vue 实例初始化阶段的 initState 函数中,执行了 if (opts.computed) initComputed(vm, opts.compu ...
- Vue计算属性
github地址:https://github.com/lily1010/vue_learn/tree/master/lesson06 一 计算属性定位 当一些数据需要根据其它数据变化时,这时候就需要 ...
- 在做vue计算属性,v-for处理数组时遇到的一个bug
bug: You may have an infinite update loop in a component render function 无限循环 需要处理的数组(在 ** ssq **里): ...
- vue教程2-03 vue计算属性的使用 computed
vue教程2-03 vue计算属性的使用 computed computed:{ b:function(){ //默认调用get return 值 } } ---------------------- ...
- vue 计算属性 实例选项 生命周期
vue 计算属性: computed:{} 写在new vue()的属性,只要参与运算,数据不发生变化时,次计算只会执行一次,结果缓存,之后的计算会直接从缓存里去结果.如果其中的值发生变化(不管几个) ...
- Vue计算属性缓存(computed) vs 方法
Vue计算属性缓存(computed) vs 方法 实例 <div id="example"> <p>Original message: "{{ ...
- vue 计算属性实现过滤关键词
效果 html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <m ...
随机推荐
- win7 mysql 数据库轻松实现数据库定时备份
本地备份: 第一步: 安装一个mysql. 第二步: 在命令行中配置mysql 打开环境变量将mysql 安装路径配置到path中 第三部: cmd 中输入:mysqldump -uroot -p12 ...
- js 原型 对象篇
一切皆对象 js中 值类型就不是对象 剩下的都是对象(也就是引用类型) typeof()运算符 判断四种值类型 typeof 10; --> Number || typeof &quo ...
- Linux tar 解压的时候报错
报错如下: # tar zxvf php-7.1.6.tar.gz gzip: stdin: not in gzip format tar: Child returned status 1 tar: ...
- java 中的instanceof
java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例.instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例. 用法:resu ...
- nginx配置文件中的location理解
关于一些对location认识的误区 1. location 的匹配顺序是"先匹配正则,再匹配普通". 矫正: location 的匹配顺序其实是"先匹配普通,再匹配正则 ...
- tomcat监控(二)
标签: linux 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 这里介绍二种监控Tomcat的方法 使用windows版本的jdk监控 使用zabbix监控 ...
- 在UITableView顶部制作简单的UISegmentControl实例方法
// http://www.tuicool.com/articles/yUfURj 使用方法 如上图: 分两步: 一.创建320长度背景,高不超过40最好 //segment背景图 UIImageVi ...
- H5WebSocket前后台代码
1.效果图 2.后台代码: public void Demo() { //return "Hello World"; HttpContextBase content = this. ...
- 知识点干货—多线程同步【6】之synchronized
"明日复明日,明日何其多. 我生待明日,万事成蹉跎. 世人若被明日累,春去秋来老将至. 朝看水东流,暮看日西坠. 百年明日能几何?请君听我明日歌. 明日复明日,明日何其多! 日日待明日,万世 ...
- wpf datagrid row height 行高自动计算使每行行高自适应文本
wpf 的datagrid的行高 要么是Auto,要么是定值:但会带来麻烦就是每行行高都一样. 当需要按内容(主要是wrap 换行的textbox或textblock)来动态调整行高的时候,需要用到d ...