“vue學習筆記&購物車的實現”
阿新 • • 發佈:2018-11-19
“vue學習筆記”
學習網站:1.https://cn.vuejs.org/v2/guide/
2. http://www.runoob.com/vue2/vue-tutorial.html
- 下載vue.js
方法1:http://unpkg.com/[email protected]/dist/vue.js
方法2:gitup下載
2.入門操作:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<!--引入vue.js -->
<script src="../vue.js"></script>
</head>
<body>
<!-- vue的容器 -->
<div id="app">
<!-- 通過mustache語法展示 -->
{{msg}}
</div>
<script>
// 例項化vue
var app=new Vue({
el:'#app',//相當於document.getElementById('app');
data:{//核心資料放置位置
msg:'Hellow,Vue'
}
})
</script>
</body>
</html>
3.vue的幾種常用語句
v-text;v-html;v-show;v-on;v-bind;v-if;v-for;v-model;v-once;v-pre;v-cloak;
1) v-text: 需要繫結在html標籤上,以v-開頭,“v”代表vue ,text代表文字
2) v-html :更新內部的innerHTML,但需要注意:v-html會把一些標籤元素內容data資料,暴露給外部,會造成一些XSS攻擊,在渲染賬號密碼等隱私資料時請不要採用這種方式
3 ) v-show :表示通過資料的true&false,來控制標籤的顯示隱藏。
4) v-on :通過事件監聽來實現相應的操作功能 "v-on" ==>可簡寫為@
5) v-bind:表示繫結標籤的屬性內容 v-bind==>':'
6) v-if表示條件判斷,當條件滿足時,自動執行v-if內容,否則執行v-else的內容。
// 注意:
// 1.當v-if滿足時,v-else內容不被渲染
// 2.v-if&v-else之間不能有其他語句,除非它是v-else-if
// 3.v-show 只是簡單的控制display:none&display:block,它的原理就是把所有標籤渲染成功之後,通過css來操作顯示隱藏
// v-if 屬於條件判斷語句,當條件滿足渲染某一個頁面標籤,否則直接不渲染
// 選取原則:
// 當擁有頻繁的tab切換時,建議你使用v-show
// 當你有較高的渲染需求時,為了節省你的初始渲染開銷,建議你使用v-if
// 4.一個迴圈體內應該包含至少有一個v-if,至多有一個v-else,可以含有多個v-else-if.
7) v-for:可以繫結陣列的資料來渲染一個專案列表:
8) v-model:用於實現表單空間的資料雙向繫結//限制範圍為:input textarea ,select
9) v-once:只被用來載入那些初始渲染頁面需要載入一次的資料,之後不再更改,可以用於優化頁面載入。
10) v-pre:
11) v-cloak:
//購物車程式碼
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<script src="./vue.js"></script>
</head>
<body>
<div id="app">
<div class="container">
<table class="table">
<thead>
<tr>
<th class="text-center">
全選
<input type="checkbox" v-model="allSelected" @click="selecteAll(allSelected)">
</th>
<th class="text-center">商品</th>
<th class="text-center">數量</th>
<th class="text-center">單價(元)</th>
<th class="text-center">金額(元)</th>
<th class="text-center">操作</th>
</tr>
</thead>
<tbody>
<tr v-for="(item,index) in items" :key="index">
<th class="text-center">
<input type="checkbox" v-model="item.selected">
</th>
<td class="text-center">{{item.name}}</td>
<td class="text-center">
<button @click="item.quanlity<=0?item.quanlity=0:item.quanlity--">-</button>
<input type="number" v-model.number="item.quanlity" style="width:100px;text-align:center;">
<button @click="item.quanlity>=20?item.quanlity=20:item.quanlity++">+</button>
</td>
<td class="text-center">{{item.price}}</td>
<td class="text-center">{{item.price*item.quanlity}}</td>
<td class="text-center">
<template v-if="index%2==0">
<button type="button" class="btn btn-primary" @click="del(index)">Delete</button>
</template>
<template v-if="index%2==1">
<button type="button" class="btn btn-warning" @click="del(index)">Delete</button>
</template>
</td>
</tr>
<tr>
<td colspan="2" class="text-center">
<button type="button" class="btn btn-danger" @click="delSelected">刪除所選商品</button>
</td>
<td colspan="2" class="text-center">商品總件數(件):{{TotalNum}}</td>
<td colspan="2" class="text-center">商品總金額(元):{{TotalPrice}}</td>
</tr>
</tbody>
</table>
</div>
</div>
<script>
var app = new Vue({
el:'#app',
data:{
items:[
{selected:true,name:'iphone5',quanlity:3,price:1000},
{selected:false,name:'iphone6',quanlity:6,price:2000},
{selected:false,name:'iphone7',quanlity:4,price:3000},
{selected:true,name:'iphone8',quanlity:3,price:4000},
{selected:true,name:'iphoneX',quanlity:8,price:5000}
]
},
computed:{
allSelected:{
get(){
return this.items.every((item,index)=>{
return item.selected
})
},
set(){}
},
TotalNum(){
return this.items.filter((item,index)=>{
return item.selected
}).length
},
TotalPrice(){
var selectedItems = this.items.filter((item,index)=>{
return item.selected
})
// console.log(selectedItems)
return selectedItems.reduce((sum,item)=>{
return sum+item.quanlity*item.price
},0)
}
},
methods:{
del(index){
this.items.splice(index,1)
},
selecteAll(value){
//1.當全選未勾選,點選,所有項都應該被勾選
//2.當全選已勾選,點選,所有項都應該取消勾選
this.items.map((item,index)=>{
item.selected=!value
})
},
delSelected(){
var result=this.items.filter((item,index)=>{
return !item.selected
})
this.items=result
}
}
})
</script>
</body>
</html>