Vue.js 计算属性

计算属性关键词: computed、methods

计算属性用于处理一些复杂逻辑

<!DOCTYPE html>
<html>
<head>
  <script type="text/javascript" src="vue.min.js"></script>
  <title></title>
  <style>
table tr td{
    border:1px solid gray;
    padding:10px;

}
table{
    border-collapse:collapse;
    width:800px;
    table-layout:fixed;
}
tr.list{
    background-color: lightGray;
}
</style>
</head>
<body>
<div id="div1">   
    <table align="center" >
        <tr class="list">
            <th>美元</th>
            <td>黄金</td>
        </tr>      
        <tr>
                <td align="center" colspan="2">
           汇率:<input type="number" v-model.number="change"/>  
            </td>
        </tr> 
        <tr>
           <td align="center">
              $:<input type="number" v-model.number = "dollar"/>
            </td>
            <td align="center">
                           盎司: {{dollar/change}}
            </td>
        </tr>
    </table>
</div>  
</body>
  <script>  
  new Vue({
    el:'#div1',
    data:{
      change:1200,
      dollar:0
    }
  })
</script>
</html>
computed vs methods
使用methods来替代 computed,效果上两个都是一样的,但是computed是基于它的依赖缓存,只有相关依赖发生改变时才会重新取值
而使用 methods ,在重新渲染的时候,函数总会重新调用执行

<!DOCTYPE html>
<html>
 <head>
 <meta charset="UTF-8"> 
<script type="text/javascript" src="vue.min.js"> </script> <title></title>
 <style>
 table tr td{ 
border:1px solid gray;
 padding:10px;
 }
 table{
 border-collapse:collapse; width:800px; table-layout:fixed;
 } 
tr.list{ 
background-color: lightGray; 
}
 </style> 
</head>
 <body>
 <div id="div1">
 <table align="center" > 
<tr class="list">
 <td>美元</td> 
<td>黄金</td> 
</tr>
 <tr> 
<td align="center" colspan="2"> 
汇率: <input type="number" v-model.number="change" /> 
</td> 
</tr> 
<tr> 
<td align="center"> 
$: <input type="number" v-model.number = "dollar" />
 </td> 
<td align="center">
 盎司: {{ ounce }} 
</td>
 </tr>
 </table> 
</div>
 </body>
 <script> 
new Vue({
 el: '#div1',
 data: { 
change:1200, 
dollar:0 
}, 
computed:{
 计算属性的 get方法
 ounce:function() {
 return this.dollar / this.change; 
}
 }
 }) 
</script> 
</html>


computed 属性默认只有 get方法,需要时可以提供一个 set方法:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <script type="text/javascript" src="vue.min.js"></script>
        <title></title>
    </head>
    <body>
<div id="app">
  <p>{{ site }}</p>
</div>

<script>
var news = new Vue({
  el: '#app',
  data: {
    name: 'Hundred poison',
    url: 'https://www.baidu.com'
  },
  computed: {
    site: {
      // get方法
      get: function () {
        return this.name + ' ' + this.url
      },
      // set方法
      set: function (newValue) {
        var names = newValue.split(' ')
        this.name = names[0]
        this.url = names[names.length - 1]
      }
    }
  }
})
// 调用 set方法, demo.name 和 demo.url 相对应更新
news.site = '极客教程 http://www.geekes.cn';
document.write('name: ' + news.name);
document.write('<br>');
document.write('url: ' + news.url);
</script>
</body>
</html>
 
computed 性能会更好,不缓存,可以使用 methods 属性

<!DOCTYPE html>
 <html> 
<head> 
<meta charset="UTF-8">
 <script type="text/javascript" src="vue.min.js"> </script> <title></title> 
<style>
 table tr td{
 border:1px solid gray;
 padding:10px;
 }
 table{
 border-collapse:collapse; 
width:800px; 
table-layout:fixed; 
} 
tr.list{
 background-color: lightGray; 
}
 </style> 
</head>
 <body> 
<div id="div1"> 
<table align="center" >
 <tr class="list"> 
<td>美元</td> 
<td>黄金</td> 
</tr> 
<tr> 
<td align="center" colspan="2">
 汇率: <input type="number" v-model.number="change" />
 </td> 
</tr> 
<tr> 
<td align="center">
 $: <input type="number" v-model.number = "dollar" />
 </td> 
<td align="center">
 <!-- 注意,getounce()是方法,要带()-->
盎司: {{ getounce() }} 
</td> 
</tr>
 </table> 
</div> 
</body>
<script> 
new Vue({ 
el: '#div1', 
data: { 
change:1200,
 dollar:0
 },
 methods:{ 
getounce:function() { 
return this.dollar / this.change;
 }
 }
 }) 
</script>
 </html>
 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值