计算属性关键词: 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>