vue實現(xiàn)本地存儲添加刪除修改功能
本文實例為大家分享了vue實現(xiàn)本地存儲添加刪除修改的具體代碼,供大家參考,具體內(nèi)容如下
實現(xiàn)功能:
輸入的內(nèi)容添加到正在進(jìn)行列表中,
雙擊修改功能,
點擊esc鍵,取消,還是之前的內(nèi)容,
點擊回車,修改成功,
修改框失焦時修改成功,
選中按鈕時進(jìn)入已完成列表,未選中時在正在進(jìn)行中列表,
點擊刪除進(jìn)行刪除當(dāng)行,
本地存儲下次打開上次添加的還在
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
*{
padding: 0;margin: 0;
}
ul{
list-style: none;
}
li{
width: 220px;
height: 40px;
border: 1px solid gainsboro;
margin-top: 4px;
display: flex;
justify-content: space-between;
align-items: center;
background-color: #6CE26C;
}
.del{
margin-right: 5px;
border: none;
width: 20px;
height: 20px;
background-color: #008200;
}
</style>
</head>
<body>
<div id="app">
<!-- 過濾輸入內(nèi)容首尾空白符 -->
<!-- 回車事件 -->
<input type="text" v-model.trim="temp" @keyup.enter="additem()"/>
<!-- 獲取正在進(jìn)行的數(shù)量 -->
<h3>正在進(jìn)行中{{undolist.length}}</h3>
<ul class="list">
<!-- 將正在進(jìn)行的內(nèi)容遍歷顯示出來 -->
<li class="item" v-for="item in undolist" :key="item.name">
<div class="">
<!-- 多選框為未選中false狀態(tài) -->
<input type="checkbox" v-model="item.done" />
<!-- 默認(rèn)為state是0,當(dāng)雙擊時state為1,內(nèi)容賦給tempEdit-->
<span v-show="item.state==0" @dblclick="item.state=1;tempEdit=item.name">{{item.name}}</span>
<!-- input框內(nèi)容為tempEdit的值,state=1時顯示輸入框,
點擊esc時state為零隱藏,內(nèi)容還是原來的值,不進(jìn)行修改,
當(dāng)回車時state為0就隱藏input框,將修改過得tempEdit,賦給item.name
當(dāng)失焦時state為0就隱藏input框,將修改過得tempEdit,賦給item.name
-->
<input type="text" v-model="tempEdit" v-show="item.state==1"
@keyup.esc="item.state=0;tempEdit=item.name"
@keyup.enter="item.state=0;item.name=tempEdit"
@blur="item.state=0;item.name=tempEdit"
/>
</div>
<!-- 點擊刪除時刪除其內(nèi)容 -->
<button type="button" @click="removeitem(item)" class="del">X</button>
</li>
</ul>
<!-- 已完成數(shù)量 -->
<h3>已經(jīng)完成{{doneList.length}}</h3>
<ul class="list">
<!-- 將已完成的內(nèi)容遍歷顯示出來 -->
<li class="item" v-for="item in doneList" :key="item.name">
<div class="">
<!-- 多選框為選中true狀態(tài) -->
<input type="checkbox" v-model="item.done" />
<!-- 默認(rèn)為state是0,當(dāng)雙擊時state為1,內(nèi)容賦給tempEdit-->
<span v-show="item.state==0" @dblclick="item.state=1;tempEdit=item.name">{{item.name}}</span>
<!-- input框內(nèi)容為tempEdit的值,state=1時顯示輸入框,
點擊esc時state為零隱藏,內(nèi)容還是原來的值,不進(jìn)行修改,
當(dāng)回車時state為0就隱藏input框,將修改過得tempEdit,賦給item.name
當(dāng)失焦時state為0就隱藏input框,將修改過得tempEdit,賦給item.name
-->
<input type="text" v-model="tempEdit" v-show="item.state==1"
@keyup.esc="item.state=0;tempEdit=item.name"
@keyup.enter="item.state=0;item.name=tempEdit;"
@blur="item.state=0;item.name=tempEdit;"
/>
</div>
<!-- 點擊刪除時刪除其內(nèi)容 -->
<button type="button" @click="removeitem(item)" class="del">X</button>
</li>
</ul>
</div>
</body>
<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
var vm=new Vue({
el:"#app",
data(){
return{
// 清單列表
// getItem是獲取本地存儲數(shù)據(jù),
// ||"[]"如果獲取不到轉(zhuǎn)換為空的數(shù)組
list:JSON.parse(localStorage.getItem("list")||"[]"),
// 臨時添加的數(shù)據(jù)存放處
temp:'',
// 修改框的臨時數(shù)據(jù)存放處
tempEdit:''
}
},
methods:{
// 添加
additem(){
// 文本框為空時就返回
if(this.temp===""){return;}
// 添加到后面
this.list.push({
name:this.temp,
done:false,
state:0
})
// 清空臨時框
this.temp="";
},
// 刪除
removeitem(item){
// 彈框
var flag=window.confirm("確定要刪除嗎?");
if(flag){
// 查找符合條件元素的索引值
var ind=this.list.findIndex(value=>value.title===item.title);
// splice從第ind刪除一個
this.list.splice(ind,1);
}
}
},
computed:{
// 通過計算把現(xiàn)有的list數(shù)據(jù)計算出已完成和未完成
// 未完成
undolist(){
// filter數(shù)組的過來函數(shù),如果返回結(jié)果為真則當(dāng)前遍歷的數(shù)據(jù)保留
// 否則就會被過濾掉
return this.list.filter(item=>!item.done);
},
// 已完成
doneList(){
return this.list.filter(item=>item.done);
}
},
watch:{
"list":{
handler(){
// setItem設(shè)置本地數(shù)據(jù)
// JSON.stringify把js對象轉(zhuǎn)換為json字符串
// JSON.prase把字符串轉(zhuǎn)換為js對象
localStorage.setItem("list",JSON.stringify(this.list))
},
deep:true,
}
}
})
</script>
</html>

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
解決Vue運算符報錯:Syntax Error: Unexpected token問題
這篇文章主要介紹了解決Vue運算符報錯:Syntax Error: Unexpected token問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01
Vue3 組合式函數(shù)Composable最佳實戰(zhàn)
這篇文章主要為大家介紹了Vue3 組合式函數(shù)Composable最佳實戰(zhàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
vue3?+?elementPlus?reset重置表單問題
這篇文章主要介紹了vue3?+?elementPlus?reset重置表單問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-05-05
解決elementui中NavMenu導(dǎo)航菜單高亮問題(解決多種情況)
這篇文章主要介紹了解決elementui中NavMenu?導(dǎo)航菜單高亮問題(解決多種情況),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-05-05

