Computed 与 Mustache 的纠葛

作者: 爱妃给朕躺下 | 来源:发表于2021-05-31 10:01 被阅读0次

初学Vue,大部分人知道 {{ }} 这个双大括号是用来绑定 data 里的属性的,这被称为 Mustache 语法,即文本插值。Vue 里也提到,我们可以在 {{ }} 里进行一些简单的运算,例如字符串拼接。但如果我们想要在里面进行更为复杂的运算,尽管是可以实现的,但 Vue 官方并不推荐这么做。

Vue 官方推荐对于模板(即双大括号)里的复杂计算,任何时候都应当使用 computed 计算属性,computed 与 methods 的区别是 Vue 里经典的问题,computed 必须 return 一个对象,这使得 computed 里面的数据可以被缓存起来(闭包原理)。接下来,我们引用一下 Vue 官方的案例来看看这个案例:

<div id="example">
  <p>Original message: "{{ message }}"</p>
  <p>Computed reversed message: "{{ reversedMessage }}"</p>
</div>

var vm = new Vue({
  el: '#example',
  data: {
    message: 'Hello'
  },
  computed: {
    // 计算属性的 getter
    reversedMessage: function () {
      // `this` 指向 vm 实例
      return this.message.split('').reverse().join('')
    }
  }
})

结果:
Original message: "Hello"
Computed reversed message: "olleH"

可以看到,这里的 reversedMessage 函数居然像 data 里的 message 一样可以在 {{ }} 里被使用!

这是因为在计算属性里的函数 reversedMessage 与 data 里 message 建立了依赖关系,这当然得益于 Vue 在底层的一些实现。所以,如果你以后在阅读别人的源码时看到了这种做法,可不要再一头雾水。

那,这里面到底是什么原理呢?

可以看到,computed 是一个对象,在对象中,有访问器属性,即最重要的 getter 与 setter 两个方法,getter 方法将在对象属性被访问时调用,setter 方法在对象属性被更改时调用。在计算属性 computed 里 Vue 隐式地将我们创建地函数放置在 getter 中,当我们使用 data 里的数据时,getter 会告诉 Vue,reversedMessage 函数调用了 data 对象的属性。reversedMessage 函数还 return 出来这个 message,其被保存了起来,以实现可读取。Vue 将这个更改过的 message 代替原来的 message,并将其渲染到 {{ }} 中。

补充阅读:访问器属性与 Vue 响应式原理
https://www.jianshu.com/writer#/notebooks/41336708/notes/88489001

相关文章

  • Computed 与 Mustache 的纠葛

    初学Vue,大部分人知道 {{ }} 这个双大括号是用来绑定 data 里的属性的,这被称为 Mustache 语...

  • VUE学习----computed和methods

    computed 如果数据需要有复杂的计算,则可以在Vue实例中定义计算属性,再交由mustache进行渲染。 c...

  • vue.js 中 data, prop, computed, m

    data, prop, computed, method 的区别 data 与 computed 的关系 根据官网...

  • Mustache

    Mustache语法记录 Mustache的类型 {{data}} {{#data}} {{/data}} {{^...

  • Mustache

    Mustache是基于jQuery的一个模板引擎 基本语法 简单对象绑定。 注意:大括号里面的内容字段要和rend...

  • Mustache

    Mustache 是一个前段的模型引擎。通过Mustache模板,我们再将所需要的数据往里面填充就可以得到相应的结...

  • Mustache

    Mustache 是一款经典的前端模板引擎,在前后端分离的技术架构下面,前端模板引擎是一种可以被考虑的技术选型,随...

  • Mustache

    mustache: 中文意思是:髭;上唇的胡子;长髭 它是一款经典的前端模板引擎,在前后端分离的技术架构下面,一度...

  • Mustache

    Mustache: multi-scale detection of chromatin loops from H...

  • springboot 使用mustcache模板

    参考链接:https://mustache.github.io/mustache.5.htmlhttp://www...

网友评论

    本文标题:Computed 与 Mustache 的纠葛

    本文链接:https://www.haomeiwen.com/subject/gvbvsltx.html