Vue學習實踐筆記(一)

  • Demo1——vue對象、v-cloak、v-text、v-html、v-bind、v-on
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<style>
		[v-cloak] {
			display: none !important;/*加!important是爲了避免被其他高優先級屬性覆蓋*/
		}
	</style>
	<script type="text/javascript" src="js/vue.js" charset="UTF-8"></script>
</head>
<body>
	<div id="app">
	<!-- 使用v-vloak命令解決刷新時暴露vue代碼的問題,需要額外定義css樣式但可以結合標籤內容 -->
		<p v-cloak>{{ msg }}</p>
	<!-- 使用v-text命令解決刷新時暴露vue代碼的問題,不需要額外定義css樣式但會覆蓋標籤內容 -->
		<p v-text="msg"></p>
		<p>{{ msg2 }}</p>
		<p v-html="msg2"></p>
		<!-- v-bind命令用於綁定自定義屬性,且可以寫合法的js表達式 -->
		<input v-bind:placeholder="mytitle + '?'" type="text">
		<!-- v-bind:可簡寫爲: -->
		<input :placeholder="mytitle + '?'" type="text">
		<!-- v-on命令用於綁定自定義事件,且可以寫合法的js表達式 -->
		<button v-on:click="show"></button>
		<!-- v-on:可簡寫爲@ -->
		<button @click="show"></button>
		<button @click="msg='歡迎學習微優異'"></button>
	</div>
	<script type="text/javascript" charset="UTF-8">
		var vm = new Vue({
			el: '#app',
			data: {
				msg: '歡迎學習Vue',
				msg2: '<p>奧利給</p>',
				mytitle: '你瞅啥'
			},
			methods:{
				show() {
					alert('瞅你咋地');
				}
			}
		})
	</script>
</body>
</html>
  • Demo2:實現滾動字幕——定時器、this、箭頭函數
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<script type="text/javascript" src="js/vue.js" charset="UTF-8"></script>
</head>
<body>
	<div id="app">
		<button @click="start">開始</button>
		<button @click="pause">暫停</button>
		<p>{{ msg }}</p>
	</div>
	<script type="text/javascript" charset="UTF-8">
		var vm = new Vue({
			el: '#app',
			data: {
				msg: '我們遇到什麼困難,也不要怕!',
				intervalId: null
			},
			methods:{
				start() {
					if (this.intervalId != null) return
					this.intervalId = setInterval( () => {
						var start = this.msg.substring(0, 1)
						var end = this.msg.substring(1)
						this.msg = end + start
					}, 100)
				},
				pause() {
					clearInterval(this.intervalId)
					this.intervalId = null
				}
			}
		})
	</script>
</body>
</html>
  • Demo3:事件修飾符——stop、self、capture、prevent、once
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<script type="text/javascript" src="js/vue.js" charset="UTF-8"></script>
	<style>
		.lz{background-color: #f00;width: 300px;height: 180px;}
		.lyl{background-color: #0f0;height: 100px;}
		.twlz{background-color: #ff0;height: 50px;}
	</style>
</head>
<body>
	<div id="app">
		<!-- .stop表示阻止所有事件的冒泡 -->
		<div class="lz" @click="dxstop">大雄
			<div class="lyl" @click="jxstop">靜香
				<div class="twlz" @click.stop="phstop">胖虎</div>
			</div>
		</div>
		<br>
		<!-- .self表示阻止自身事件的冒泡 -->
		<div class="lz" @click="dxself">大雄
			<div class="lyl" @click.self="jxself">靜香
				<div class="twlz" @click="phself">胖虎</div>
			</div>
		</div>
		<br>
		<!-- .capture表示由外向內捕獲事件 -->
		<div class="lz" @click.capture="lzcapture">旅長
			<div class="lyl" @click="lylcapture">李雲龍</div>
		</div>
		<!-- .prevent表示阻止默認事件 -->
		<a href="www.jnpgc.com" @click.prevent="prevent">江南皮革廠官網</a>
		<!-- .once表示只觸發一次事件 -->
		<p @click.once="once">自宮指南</p>
		<!-- .once和.prevent連用(不分順序先後)表示只阻止一次默認事件 -->
		<a href="http://www.baidu.com" @click.once.prevent="onceprevent">葵花寶典</a>
		
	</div>
	<script type="text/javascript" charset="UTF-8">
		var vm = new Vue({
			el: '#app',
			data: {
			},
			methods:{
				prevent() { console.log('本廠已倒閉,產品全白送') },
				once() { console.log('自宮成功,不可再宮') },
				onceprevent() { console.log('自宮成功,不可再宮,趁熱打鐵,練就神功') },
				lzcapture() { console.log('李雲龍!') },
				lylcapture() { console.log('喲,旅長') },
				phstop() { console.log('我倒看看是誰不給我胖虎面子') },
				jxstop() { console.log('...') },
				dxstop() { console.log('...') },
				phself() { console.log('我倒看看是誰不給我胖虎面子') },
				jxself() { console.log('...') },
				dxself() { console.log('我大雄不出手,你胖虎要上天不成') }
			}
		})
	</script>
</body>
</html>
  • Demo4:數據雙向綁定——v-model
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<script type="text/javascript" src="js/vue.js" charset="UTF-8"></script>
</head>
<body>
	<div id="app">
		<p>{{ msg }}</p>		
		<!-- v-bind只能實現數據從m到v的單向綁定,無法實現雙向綁定 -->
		<input placeholder="" :value="msg" type="text" style="width: 100%;">
		<!-- v-model可以實現表單元素和Model中數據的雙向綁定 -->
		<!-- v-model只能運用在表單元素中 -->
		<input placeholder="" v-model="msg" type="text" style="width: 100%;">
	</div>
	<script type="text/javascript" charset="UTF-8">
		var vm = new Vue({
			el: '#app',
			data: {
				msg: "boy♂next♂door"
			},
			methods:{
			}
		})
	</script>
</body>
</html>
  • Demo5:實現簡單計算器——數據雙向綁定練習
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<script type="text/javascript" src="js/vue.js" charset="UTF-8"></script>
</head>
<body>
	<div id="app">
		<input type="text" v-model="n1">
		<select v-model="opt">
			<option value="+">+</option>
			<option value="-">-</option>
			<option value="*">*</option>
			<option value="/">/</option>
		</select>
		<input type="text" v-model="n2">
		<button @click="calc">=</button>
		<input type="text" v-model="result">
	</div>
	<script type="text/javascript" charset="UTF-8">
		var vm = new Vue({
			el: '#app',
			data: {
				n1: 0,
				opt: '+',
				n2: 0,
				result: 0
			},
			methods:{
				calc() {
					switch (this.opt) {
						case '+':
						this.result = parseInt(this.n1) + parseInt(this.n2)
						break
						case '-':
						this.result = parseInt(this.n1) - parseInt(this.n2)
						break
						case '*':
						this.result = parseInt(this.n1) * parseInt(this.n2)
						break
						case '/':
						this.result = parseInt(this.n1) / parseInt(this.n2)
						break
					}
				}
			}
		})
	</script>
</body>
</html>
  • Demo6:綁定樣式——css類樣式、style行內樣式
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<script type="text/javascript" src="js/vue.js" charset="UTF-8"></script>
	<style>
	.red{color: red;}
	.thin{font-weight: 200;}
	.italic{font-style: italic;}
	.active{letter-spacing: 0.5em;}
	</style>
</head>
<body>
	<div id="app">
	<h1 :class="['red', 'thin']">使用v-bind綁定class屬性,給class傳遞一個數組</h1>
	<h1 :class="['italic', 'thin', flag?'active':'']">在數組中使用三元表達式</h1>
	<h1 :class="['italic', 'thin', {'active': flag}]">在數組中使用對象來代替三元表達式,提高代碼的可讀性</h1>
	<h1 :class="classObj">給class屬性傳遞一個對象</h1>
	<h1 :style="{ color: 'green', 'font-weight': 2000 }">直接在style屬性中書寫樣式</h1>
	<h1 :style="styleObj1">給style屬性傳遞一個對象</h1>
	<h1 :style="[styleObj1, styleObj2]">給style屬性傳遞一個數組</h1>
	</div>
	<script type="text/javascript" charset="UTF-8">
		var vm = new Vue({
			el: '#app',
			data: {
				flag: true,
				classObj: { red: true, thin: false, italic: true, active: false },
				styleObj1: { color: 'blue', 'font-weight': 2000 },
				styleObj2: { 'font-style': 'italic' }
			},
			methods: {
			}
		})
	</script>
</body>
</html>
  • Demo7——v-for和key屬性
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<script type="text/javascript" src="js/vue.js" charset="UTF-8"></script>
</head>
<body>
	<div id="app">
		<span v-for="item in list1">{{ item }}&nbsp;</span>
		<p v-for="(item, i) in list1">索引值爲{{ i }}的元素值爲{{ item }}</p>
		<p v-for="user in list2">{{ user.id }},字{{ user.name }}</p>
		<p v-for="(user, i) in list2">{{ i+1 }}號選手{{ user.id }},字{{ user.name }}</p>
		<p v-for="(val, key, i) in daren">{{ i }}&emsp;{{ key }}:&nbsp;{{ val }}</p>
		<p v-for="count in 10">第{{ count }}次循環(從1開始迭代)</p>
		<div>
			<label>ID:
				<input type="text" v-model="id">
			</label>
			<label>Name:
				<input type="text" v-model="name">
			</label>
			<button @click="add">添加</button>
		</div>
		<!-- 當使用v-for出現問題時,必須爲迭代的元素指定唯一的key屬性,key只能是數字或字符串 -->
		<p v-for="item in list" :key="item.id">
			<input type="checkbox">
			{{ item.name }}
		</p>
	</div>
	<script type="text/javascript" charset="UTF-8">
		var vm = new Vue({
			el: '#app',
			data: {
				id: '',
				name: '',
				list: [
				{ id: 1, name: '劉能' },
				{ id: 2, name: '趙四' },
				{ id: 3, name: '廣坤' },
				{ id: 4, name: '玉田' }
				],
				list1: [1, 2, 3, 4, 5, 6],
				list2: [
				{ id: '趙雲', name: '子龍' },
				{ id: '關羽', name: '雲長' },
				{ id: '周瑜', name: '公瑾' }
				],
				daren: {
					id: "同鳳格鸞臺平章事",
					level: "當朝宰輔",
					name: "內史狄仁傑"
				}
			},
			methods: {
				add() {
					this.list.unshift({id: this.id, name: this.name})
				}
			}
		})
	</script>
</body>
</html>
  • Demo8——v-if和v-show
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<script type="text/javascript" src="js/vue.js" charset="UTF-8"></script>
</head>
<body>
	<div id="app">
	<button @click="toggle">toggle</button>
	<h3 v-if="flag">v-if每次都重新刪除或創建元素,有較高的切換性能消耗,如果元素涉及到頻繁的切換,最好不要使用v-if,用v-show</h3>
	<h3 v-show="flag">v-show每次不會重新進行DOM的刪除創建操作,只是改變了元素的display屬性,有較高的初始渲染消耗,如果元素可能永遠也不會顯示出來被用戶看到,最好不要使用v-show,用v-if</h3>
	</div>
	<script type="text/javascript" charset="UTF-8">
		var vm = new Vue({
			el: '#app',
			data: {
				flag: true
			},
			methods: {
				toggle() {
					this.flag = !this.flag;
				}
			}
		})
	</script>
</body>
</html>

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章