一、计算属性

在模板内使用

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——计算属性和观察者的更多相关文章

  1. vue计算属性和观察者

    1. 计算属性 模板内的表达式非常便利,但在模板中放入太多的逻辑会让模板过重且难以维护,所有就有了计算属性 例子: //html代码 <div id="example"> ...

  2. 前端MVC Vue2学习总结(三)——模板语法、过滤器、计算属性、观察者、Class 与 Style 绑定

    Vue.js 使用了基于 HTML 的模版语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据.所有 Vue.js 的模板都是合法的 HTML ,所以能被遵循规范的浏览器和 HTML 解 ...

  3. 七、vue计算属性

    细节流程图 初始化 计算属性的初始化是发生在 Vue 实例初始化阶段的 initState 函数中,执行了 if (opts.computed) initComputed(vm, opts.compu ...

  4. Vue计算属性

    github地址:https://github.com/lily1010/vue_learn/tree/master/lesson06 一 计算属性定位 当一些数据需要根据其它数据变化时,这时候就需要 ...

  5. 在做vue计算属性,v-for处理数组时遇到的一个bug

    bug: You may have an infinite update loop in a component render function 无限循环 需要处理的数组(在 ** ssq **里): ...

  6. vue教程2-03 vue计算属性的使用 computed

    vue教程2-03 vue计算属性的使用 computed computed:{ b:function(){ //默认调用get return 值 } } ---------------------- ...

  7. vue 计算属性 实例选项 生命周期

    vue 计算属性: computed:{} 写在new vue()的属性,只要参与运算,数据不发生变化时,次计算只会执行一次,结果缓存,之后的计算会直接从缓存里去结果.如果其中的值发生变化(不管几个) ...

  8. Vue计算属性缓存(computed) vs 方法

    Vue计算属性缓存(computed) vs 方法 实例 <div id="example"> <p>Original message: "{{ ...

  9. vue 计算属性实现过滤关键词

    效果 html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <m ...

随机推荐

  1. Linuxc - Makefile完成项目的管理。

    Makefile完成项目的管理. root@jiqing-virtual-machine:~/cspace/les2# ls main.c Makefile max.c max.h min.c min ...

  2. Centos7-两台Centos机器间复制文件

    我又两台Centos机器,一台192.168.1.1:另一台192.168.1.2 现在在将192.168.1.1上的一个文件复制到192.168.1.2.登陆到192.168.1.1然后运行命令 命 ...

  3. mysql-SQL优化总结

    1.查询首先考虑在where和order by设计的列上建立索引,尽量避免全表扫描. 2.尽量避免在where子句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描. select ...

  4. linux_操作系统

    如何查询操作系统版本? cat /etc/redhat-release 什么是操作系统? -- win10,linux都是os,应用软件和硬件打交道中间桥梁软件,管理 硬件+软件 资源,计算机系统基础 ...

  5. python_求1-2+3-4+......-100的值

    求1-2+3-4+5---100 = ? 逻辑整理: -- 本质上可以转换一下,1+3+5+--+99 -(2+4+--+100) 加减部分间隔都为2,先求1+3+5+--+99的值, 再求2+4+- ...

  6. python2.7.5 安装pip 良心推荐,超级简单.

    1 先安装setuptools 下载地址:https://pypi.python.org/pypi/setuptools#downloads 将下载后的tar文件解压,用CMD模式进入到解压后的文件所 ...

  7. mysql 列转行,合并字段

    数据表: 列转行:利用max(case when then) max---聚合函数 取最大值 (case course when '语文' then score else 0 end) ---判断   ...

  8. MongoDB投影有$slice如何只显示该字段

    简单的投影 稍微用过MongoDB的都知道,投影很简单,就直接 db.student.find({_id:ObjectId('5a5085aed8f10c1a6cc0395b')},{comments ...

  9. linux命令之read

    对于写bash脚本的朋友,read命令是不可或缺的,需要实践一下就可以了解read命令的大致用途: 编写一个脚本: #!/bin/bash # hao32 test read echo -e &quo ...

  10. oracle的分组查询和连接查询

    分组函数: 六个常用的分组函数: AVG,SUM,MIN,MAX,COUNT,WM_CONCAT: 行转列 PS:分组函数默认会自动过滤控制,可以使用NVL函数使分组函数无法忽略空值: 未使用NVL函 ...