zoukankan      html  css  js  c++  java
  • 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: 销售部
  • 相关阅读:
    C#编程规范
    实用JavaScript代码库
    JSON入门
    asp.net基本事件
    iOS开发笔记 3、iOS基础
    iOS开发笔记 8、真机调试和发布软件
    数据同步框架MS Sync Framework不同场景使用例子和简要分析
    使用AppFabric 承载WCF和WF服务实例分析和说明
    .net程序员的iPhone开发MonoTouch
    iOS开发笔记 4、iOS中的Cocoa、设计模式等
  • 原文地址:https://www.cnblogs.com/shamo89/p/10201577.html
Copyright © 2011-2022 走看看