计算属性

204 阅读1分钟
//需求:把数字的顺序变成789,456,123
<div id = "#demo">

{{text}} <br>
{{text.split(',').reverse().join(',')}}<br>

</div>

var app = new Vue({
        el:'#demo',
        data:{
            text:'123,456,789'

        }
    } )

先把字符串变成数组,用逗号分割text.split(',');变成[123,456,789] 然后数组的逆转顺序,用.reverse;变成了[789,456,123] 把数组变成字符串,用逗号分割.join(',') 变成了‘789,456,123’

计算属性案例2,购物车总价格

计算属性的第一个功能:

<body>
  <div id ="demo">
    
     两个购物车总计: {{prices}}

  </div>
  <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.14/vue.min.js"></script>
  <script type="text/javascript">
  
  var app2 = new Vue({
      el:'#abc',
      data:{
          msg:'我是app2里面的内容'

      }
  })
  var app1 = new Vue({
      el:'#demo',
      data:{
          //第一个购物车
          package1:[
              {
                  name:'iPhone',
                  price:6999,
                  count:2
              },
              {
                  name:'ipad',
                  price:3600,
                  count:1
              }
          ],
      
          //第二个购物车
          package2:[
              {
                  name:'iphone',
                  price:6999,
                  count:3
              },
              {
                  name:'ipad',
                  price:3600,
                  count:6
              }
          ]

          },
      //定义计算属性
      computed:{
          prices:function(){
              var prices = 0;
              for (var i = 0; i<this.package1.length;i++){
                 prices += this.package1[i].price*this.package1[i].count;
              }
              for (var j = 0; j<this.package2.length;j++){
                 prices += this.package2[j].price*this.package2[j].count;
              }
              return prices+'--------'+app2.msg;

          }
          
      }
      
  })
  </script>
  
</body>

计算属性的第二个功能:显示姓名示例:

 <div id ="abc">
      我的名字是------{{fullName}}
   </div>
   <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.14/vue.min.js"></script>
   <script>
       var app2 = new Vue({
           el:"#abc",
           data:{
               firstName:'zhang',
               lastName:'sanfeng'
           },
           computed:{
               //计算属性默认是getter函数
               fullName:function(){
                   return this.firstName+'  '+this.lastName
               },
             *  set:function(newValue){
               conlose.log('我是set方法。我被调用了')
               var names = newValue.split(',');//分割为数组
               this.firstName = names[0];
               this.lastName = names[1];
               }*
           }
       })
   </script>

计算属性的缓存?????

共同之处: 调用methods里的方法也可以达到与计算属性有同样的作用 不同之处:

页面中的方法(methods):调用方法时,只要页面得到渲染,方法就会重新执行;页面不需要渲染时,方法不重新执行。 计算属性(compured):无论页面重新渲染与否,只要计算属性所依赖的数据没有变化,它都不变化。 结论: 不用计算属性,在 methods 里定义一个方法,也可以达到同样的效果,甚至该方法还可以接受参数,更灵活。那为什么还需要计算属性呢?原因是 计算属性是基于它的依赖缓存的,只要它所依赖的数据没有发生变,计算属性就不会重新跟新。