1. 程式人生 > >Vue學習(5)————————ToDoList條件渲染(v-if)(簡單快取)(方法封裝)

Vue學習(5)————————ToDoList條件渲染(v-if)(簡單快取)(方法封裝)

個人理解簡寫 

<template>
  <div id="app">
			<input type="text" v-model="textmode"><br />
			<button v-on:click="setListA()">提交未辦理資訊</button>
			<hr />
			<h1>未辦理的事情</h1>
			<table border="" cellspacing="" cellpadding="" class="tableone">
				<tr v-for="(item,key) in lista">
					<td>{{item}}</td>
					<td>{{key}}</td>
					<td><button v-on:click="setOver(key)">完成</button></td>
				</tr>
			</table>
			<hr />
			<h2>已完成事項</h2>
			<table border="" cellspacing="" cellpadding="" class="tableone">
				<tr v-for="(item,key) in listb">
					<td>{{item}}</td>
					<td>{{key}}</td>
					<td><button v-on:click="deleteindex(key)">刪除</button></td>
				</tr>
			</table>
	</div>
</template>

<script>
export default {
  name: 'app',
  data () {
  	return {
  		textmode:'',
  		lista:[],
  		listb:[]
  	}
  },methods:{
			setListA(){
				
				this.lista.push(this.textmode);
				
				this.textmode="";
			},
			setOver(key){
				var str = this.lista[key];
				
				this.lista.splice(key,1);
				
				this.listb.push(str);
			},
			deleteindex(key){
				
				this.listb.splice(key,1);
			}
		}
}
</script>

活用V-MODEL標籤

V-IF的基本使用

<template>
  <div id="app">
			<h1 v-if="booleanpar">booleanpar是true</h1>
			<h1 v-if="!booleanpar">booleanpar是false</h1>
	</div>
</template>

<script>
export default {
  name: 'app',
  data () {
  	return {
  		booleanpar: true ,
  	}
  },methods:{
			
		}
}
</script>

雙向資料繫結小示例

<template>
  <div id="app">
		<input type="text" v-model="textmodel" v-on:keydown="setList($event)"/>
		<button v-on:click="setList($event)">提交未來想要做的事</button>
		<hr>
		<h1>想要做的事</h1>
		<table border="1" cellspacing="" cellpadding="" class="tableone">
			<tr v-for="(item,key) in list" v-if="!item.stuats">
				<td><input type="checkbox" v-model="item.stuats"></td>
				<td>{{item.text}}</td>
				<td>{{key}}</td>
				<td><button v-on:click="deleteKey(key)">刪除此內容</button></td>
			</tr>
		</table>
		<hr />
		<h1>已完成的事</h1>
		<table border="1" cellspacing="" cellpadding="" class="tableone">
			<tr v-for="(item,key) in list" v-if="item.stuats">
				<td><input type="checkbox" v-model="item.stuats"></td>
				<td>{{item.text}}</td>
				<td>{{key}}</td>
				<td><button v-on:click="deleteKey(key)">刪除此內容</button></td>
			</tr>
		</table>
		
  </div>
</template>

<script>
export default {
  name: 'app',
  data () {
  	return {
  		textmodel:'',
  		list:[]
  	}
  },methods:{
			setList(e){
				console.log(e.keyCode)
				
				if(e.keyCode==13||e.keyCode==undefined){
					
					if(this.textmodel!=''){
					
						var textbean = new Object;
						
						textbean.text = this.textmodel;
						
						textbean.stuats = false;
						
						this.list.push(textbean);
						
						this.textmodel='';
					}
			 }
			},
			deleteKey(key){
				
				this.list.splice(key,1);
			}
			
		}
}
</script>

簡單快取資料(利用localStorage.setItem設定快取值)

<template>
  <div id="app" class="bodydiv">
		<input type="text" v-model="textmodel" v-on:keydown="setList($event)"/>
		<button v-on:click="setList($event)">提交未來想要做的事</button>
		<hr>
		<h1>想要做的事</h1>
		<table border="1" cellspacing="" cellpadding="" class="tableone">
			<tr v-for="(item,key) in list" v-if="!item.stuats">
				<td><input type="checkbox" v-model="item.stuats"></td>
				<td>{{item.text}}</td>
				<td>{{key}}</td>
				<td><button v-on:click="deleteKey(key)">刪除此內容</button></td>
			</tr>
		</table>
		<hr />
		<h1>已完成的事</h1>
		<table border="1" cellspacing="" cellpadding="" class="tableone">
			<tr v-for="(item,key) in list" v-if="item.stuats">
				<td><input type="checkbox" v-model="item.stuats"></td>
				<td>{{item.text}}</td>
				<td>{{key}}</td>
				<td><button v-on:click="deleteKey(key)">刪除此內容</button></td>
			</tr>
		</table>
  </div>
</template>

<script>
export default {
  name: 'app',
  data () {
  	return {
  		textmodel:'',
  		list:[],

  	}
  },methods:{
			setList(e){
				console.log(e.keyCode)
				
				if(e.keyCode==13||e.keyCode==undefined){
					
					if(this.textmodel!=''){
					
						var textbean = new Object;
						
						textbean.text = this.textmodel;
						
						textbean.stuats = false;
						
						this.list.push(textbean);
						
						this.textmodel='';
						//JSON.stringify(this.list)把物件轉成字串
						localStorage.setItem('list',JSON.stringify(this.list));
					}
			 }
			},
			deleteKey(key){
				
				this.list.splice(key,1);
				
				localStorage.setItem('list',JSON.stringify(this.list));
			}
			
		},mounted(){
			
			//和data,methods同級
			/*生命週期函式,頁面重新整理時執行*/
			var list = JSON.parse(localStorage.getItem('list'));
			//判斷獲取的值是否為空,不為空付給引數
			if(list){
			
			this.list = list;
			}
		}
}
</script>

但是這樣設定的話,內容是快取到了,但是點選checkbox變換他的狀態,並沒有記錄下來,所以他一直是存入的初始化給他的stutas

所以說要在當狀態改變時也要往快取裡存入一遍值

<td><input type="checkbox" v-model="item.stuats" v-on:change="saveList()"></td>


saveList(){
				
				localStorage.setItem('list',JSON.stringify(this.list));
			}	

這樣雖然實現了 ,但是 裡面有了三條重複的程式碼,localStorage.setItem('list',JSON.stringify(this.list));

也許我們可以把他封裝一下

——————————————————————————————————————————————————————

方法封裝

首先先在專案中的src下建立一個資料夾,並建立個js檔案

然後在裡面編寫

//封裝操作locastorage,本地快取方法  ,模組化的檔案
//node.js 基礎(有機會再實際瞭解)
var storage = {
	
	set(key,value){
	
		//把物件全部轉換成字串
		localStorage.setItem(key,JSON.stringify(value));
	},
	get(key){
		
		var list = JSON.parse(localStorage.getItem(key));
		
		return list;
	},
	remove(key){
		//刪除快取鍵值對
		localStorage.removeItem(key);
	}
}

//暴露出去供其他呼叫(固定格式)
export default storage;

個人感覺這就相當於建立了一個類。。然後去app.vue匯入他去呼叫,匯入一下下

<script>
import storage from './model/storage.js';
	//看看storage暴露出來,是不是物件
	console.log(storage);
</script>

然後就可以這麼搞了,直接類名呼叫

<script>
import storage from './model/storage.js';
	//看看storage暴露出來,是不是物件
	console.log(storage);
export default {
  name: 'app',
  data () {
  	return {
  		textmodel:'',
  		list:[],

  	}
  },methods:{
			setList(e){
				console.log(e.keyCode)
				
				if(e.keyCode==13||e.keyCode==undefined){
					
					if(this.textmodel!=''){
					
						var textbean = new Object;
						
						textbean.text = this.textmodel;
						
						textbean.stuats = false;
						
						this.list.push(textbean);
						
						this.textmodel='';
						//JSON.stringify(this.list)把物件轉成字串
						storage.set('list',this.list);
					}
			 }
			},
			deleteKey(key){
				
				this.list.splice(key,1);
				
				storage.set('list',this.list);
			},
			saveList(){
				
				storage.set('list',this.list);
			}	
		},mounted(){
			
			//和data,methods同級
			/*生命週期函式,頁面重新整理時執行*/
			var list = storage.get('list');
			//判斷獲取的值是否為空,不為空付給引數
			if(list!=null){
				
				this.list = list;
			}
		}
}
</script>