• Vue(七):computed计算属性


    简介

    计算属性关键词: computed。

    计算属性在处理一些复杂逻辑时是很有用的。

    实例1

    可以看下以下反转字符串的例子:

    <div id="app">
      {{ message.split('').reverse().join(' | ')}}
    </div>
    
    <script>
    new Vue({
      el: '#app',
      data: {
        message: '上海自来水来自海上'
      }
    })
    </script>

    上面例子中模板变的很复杂起来,也不容易看懂理解。

    实例2

    接下来我们看看使用了计算属性的实例:

    <div id="app">
        {{message}}
        <br>
        {{reverseMessage}}
    </div>
    
    <script>
    new Vue({
      el: '#app',
      data: {
        message: '上海自来水来自海上'
      },
      computed:{
    // 计算属性的 getter reverseMessage:
    function(){ // `this` 指向 vm 实例 return this.message.split('').reverse().join(' | ') } } }) </script>

    上面实例中声明了一个计算属性 reversedMessage 。

    提供的函数将用作属性 vm.reversedMessage 的 getter 。

    vm.reversedMessage 依赖于 vm.message,在 vm.message 发生改变时,vm.reversedMessage 也会更新

    vue.js里computed 和 methods的区别

    我们可以使用 methods 来替代 computed,效果上两个都是一样的,但是 computed 是基于它的依赖缓存,只有相关依赖发生改变时才会重新取值。而使用 methods ,在重新渲染的时候,函数总会重新调用执行

    <div id="app">
        {{message}}
        <br>
        {{reverseMessage1()}}
        <br>  <!--注意方法是要加上()的,而属性不需要-->
        {{reverseMessage2}}
    </div>
    
    <script>
    new Vue({
      el: '#app',
      data: {
        message: '上海自来水来自海上'
      },
      methods:{
        reverseMessage1:function(){
          // `this` 指向 vm 实例
          return this.message.split('').reverse().join(' # ')
        }
      },
      computed:{
        reverseMessage2:function(){
          // `this` 指向 vm 实例
          return this.message.split('').reverse().join(' | ')
        }
      }
    })
    </script>

    可以说使用 computed 性能会更好,但是如果你不希望缓存,你可以使用 methods 属性

    computed setter

    computed 属性默认只有 getter ,不过在需要时你也可以提供一个 setter :

    <div id="app">
      <p>{{ userinfo }}</p>
    </div>
    
    <script>
    var vm = new Vue({
      el: '#app',
      data: {
        username: '刘凯',
        department: '财务部'
      },
      computed: {
        userinfo: {
          // getter
          get: function () {
            return this.username + '#' + this.department
          },
          // setter
          set: function (newinfo) {
            var infos = newinfo.split('#')
            this.username = infos[0]
            this.department = infos[infos.length - 1]
          }
        }
      }
    })
    // 调用 setter, vm.username 和 vm.department 也会被对应更新
    vm.userinfo = '张晓晓#销售部';
    document.write('username: ' + vm.username);
    document.write('<br>');
    document.write('department: ' + vm.department);
    </script>

    vm.userinfo = '张晓晓#销售部'这一行代码是关键,分别注释掉和打开注释运行这段代码,分别会出现一下两种结果

    刘凯#财务部
    
    username: 刘凯
    department: 财务部
    张晓晓#销售部
    
    username: 张晓晓
    department: 销售部
  • 相关阅读:
    自学大数据初期
    研究正则表达式
    智能穿戴设备移动APP端与外设数据传输协议
    集成Facebook SDK
    Core Data数据库迁移
    用Time Machine做更换电脑工具
    iOS Automation Test
    编译libcore-amr静态库
    解决CentOS 7安装zabbix 3.0 无法启动zabbix-server的问题[segfault at 18 ip 00007f78842b4bd0 sp 00007fff1995a818 error 4 in libpthread-2.17.so[7f78842ab000+16000]]
    CentOS 7 安装Percona,Xtrabackup
  • 原文地址:https://www.cnblogs.com/shamo89/p/10201577.html
Copyright © 2020-2023  润新知