zoukankan      html  css  js  c++  java
  • Vue-computed计算属性

    一.Vue中的计算属性:computed

      顾名思义,用于计算,便于计算的属性,

      疑问:但是为什么会出现计算属性呢,官方文档已经给出了答案,这里引用官方文档中的原文: 

        模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护。例如:

        //未使用计算属性--在模板内计算
        <div id="example">        {{ message.split('').reverse().join('') }}     </div>

        在这个地方,模板不再是简单的声明式逻辑。你必须看一段时间才能意识到,这里是想要显示变量 message 的翻转字符串。当你想要在模板中多次引用此处的翻转字符串时,就会更加难以处理。所以,对于任何复杂逻辑,你都应当使用计算属性。 

      //使用计算属性
      <
    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('')
          }
        }
      })

      通俗来说使用计算属性有以下几点好处:

        1.模板内适合简单的表达式,用于简单的运算,而不适合于复杂的运算,

        2.如果需要在模板使用运算以后的数据,则代码的复用性变差

        3.computed和motheds在某种程度上都能完成相同的事情,但是计算属性具有缓存的作用,如果计算属性中依赖的数据没变,则计算属性会得到保存

          而methods方法则不同,每当页面渲染的时候,methods方法会重新执行

    二.计算属性的使用

      计算属性的两种写法

    computed: {
        //第一种写法
        noChildren: function() {
          return this.asideMenu.filter(item => !item.children)
        },
        //第二种写法
        hasChildren() {
          return this.asideMenu.filter(item => item.children)
        },
      }

    三,计算属性的setter与getter方法

      注意:计算属性默认只有getter,不过在需要时,也可以提供一个setter

    <div id="demo">{{ fullName }}</div>
    var vm = new Vue({
      el: '#demo',
      data: {
        firstName: 'Foo',
        lastName: 'Bar',
        fullName: 'Foo Bar'
      },
    computed: {
      fullName: {
    // getter
        get: function () {
          return this.firstName + ' ' + this.lastName },
      // setter
        set: function (newValue) {
          var names = newValue.split(' ')
          this.firstName = names[0]
          this.lastName = names[names.length - 1]
      }
    }
    }

    现在再运行 vm.fullName = 'John Doe' 时,setter 会被调用,vm.firstName 和 vm.lastName也会相应地被更新。

  • 相关阅读:
    hdu 3367 Pseudoforest
    hdu 2489 Minimal Ratio Tree
    hdu 4009 Transfer water
    poj 3164 Command Network
    hdu 3926 Hand in Hand
    hdu 3938 Portal
    5-26日(面经总结)
    5-25日
    5-21日|5-22日
    5-13日记录|5-14日
  • 原文地址:https://www.cnblogs.com/july-sunny/p/11714755.html
Copyright © 2011-2022 走看看