出错情况
我尝试用以下代码测试Vue的computed
onclick
<!DOCTYPE html>
<html lang="zh_cn">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>vue学习--第二章</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
</head>
<body>
<div id="app">
<p>总价格:{{totalPrice}}</p>
<p>单价:{{price}}</p>
<p>数量:{{num}}</p>
</div>
<div>
<button onclick="num == 0 ? 0 : num --"> 减少数量 </button>
<button onclick="num ++">增加数量</button>
</div>
<script>
var vm = new Vue({
el:'#app',
data:{
price: 20,
num: 0,
},
method:{
decreaseNum(){
this.num == 0 ? 0 : this.num --;
console.log(this.num);
},
increaseNum(){
this.num ++;
console.log(this.num);
}
},
computed: {
totalPrice() {
return this.price * this.num;
}
}
})
</script>
</body>
</html>
结果报以下的错
调用方法
于是我又尝试调用方法去实现效果,结果也报错
<div id="app">
<p>总价格:{{totalPrice}}</p>
<p>单价:{{price}}</p>
<p>数量:{{num}}</p>
</div>
<div>
<button onclick="decreaseNum"> 减少数量 </button>
<button onclick="increaseNum">增加数量</button>
</div>
@click
上面的方法都不行后,我尝试用@click
去实现,结果错的确没报错了,但是根本没反应……
解决问题
于是我开始尝试自己解决问题,然后我看见了这个代码el:#app
结合el唯一跟标签的定义+项目实际应用只能有一个大div的情况。
我尝试直接将其移动至app
的div中去
<!DOCTYPE html>
<html lang="zh_cn">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>vue学习--第二章</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
</head>
<body>
<div id="app">
<p>总价格:{{totalPrice}}</p>
<p>单价:{{price}}</p>
<p>数量:{{num}}</p>
<div>
<button @click="num == 0 ? 0 : num--"> 减少数量 </button>
<button @click="num++">增加数量</button>
</div>
</div>
<script>
var vm = new Vue({
el: '#app',
data: {
price: 20,
num: 0,
},
methods: {
decreaseNum() {
this.num == 0 ? 0 : this.num--;
console.log(this.num);
},
increaseNum() {
this.num++;
console.log(this.num);
}
},
computed: {
totalPrice() {
return this.price * this.num;
}
}
})
</script>
</body>
</html>
结果成了,出现我期望的结果
当然按钮的@click也同样等价与v-on:click
,但是在vue风格指南中,推荐使用简写
<div id="app">
<p>总价格:{{totalPrice}}</p>
<p>单价:{{price}}</p>
<p>数量:{{num}}</p>
<div>
<button v-on:click="num == 0 ? 0 : num--"> 减少数量 </button>
<button v-on:click="num++">增加数量</button>
</div>
</div>