【筆記整理】VUE基礎入門+例子實踐

VUE基礎

1-1. VUE2.0介紹

Vue.js(讀音/vjuː/,類似於view)是一套構建用戶界面的漸進式框架。與其他重量級框架不同的是,Vue採用自底向上增量開發的設計。Vue的核心庫只關注視圖層,它不僅易於上手,還便於與第三方庫或既有項目整合。另一方面,當與單文件組件和Vue生態系統支持的庫結合使用時,Vue也完全能夠爲複雜的單頁應用程序提供驅動。

Vue的一些語法和AngularJS 的很相似(例如v-if vs ng-if)。
因爲AngularJS 是Vue早期開發的靈感來源。然
而,AngularJS 中存在的許多問題,在Vue中已經得到解決。
•複雜性
•靈活性和模塊化
•數據綁定
•指令與組件
•性能

React 和Vue有許多相似之處,它們都有:
•使用Virtual DOM(虛擬DOM)
•提供了響應式(Reactive)和組件化(Composable)的視圖組件。
•將注意力集中保持在覈心庫,而將其他功能如路由和全局狀態管理交給相關的庫。

三步實現hello world
Step1:引入腳本https://unpkg.com/vue
Step2:<div id="app">{{ message }}</div>
Step3:var app = new Vue({el: '#app',data: {message: 'Hello Vue!'}})

  • 注意點

Vue不兼容IE8以下。把一個普通JavaScript 對象傳給Vue實例的data 選項,Vue將遍歷此對象所有的屬性,並使用Object.defineProperty把這些屬性全部轉爲getter/setterObject.defineProperty是僅ES5 支持,且無法shim 的特性,這也就是爲什麼Vue不支持IE8 以及更低版本瀏覽器的原因。

<!DOCTYPE html>
<html>
<head>
	<title></title>
	<meta charset="utf-8">
	<script type="text/javascript" src="js/vue.js"></script>
</head>
<body>
<div id="app">
	{{message}}
</div>
</body>
<script type="text/javascript">
	var v = new Vue({
		el: "#app",
		data: {
			message: "hello world!!! 你好,世界!"
		}
	})
</script>
</html>

1-2. VUE基本使用,模板語法

Vue使用了基於HTML的模板語法,允許開發者聲明式地將DOM綁定至底層Vue實例的數據。

數據綁定是最常見的”Mustache”語法,即雙大括號形式。

使用方式:1. 文本

<div>{{message}}</div><div v-once>這個只執行一次:{{message}}</div>

使用方式:2. 純HTML

<div v-html=“htmlMsg”></div>相當於執行了原生的.innerHTML= htmlMsg;

注意:動態渲染html非常危險,容易導致XSS攻擊。即跨站腳本攻擊。

使用方式:3. 綁定屬性

<button v-bind:disabled=“btnFlag”>測試按鈕</button>

使用方式:4. 使用JavaScript表達式

<div>數學運算:{{x + y}}</div>

<div>三目運算:{{ok ? “yes” : “no”}}</div>

<div>方法的調用:{{msg.split(‘’).reverse().join()}}</div>

注意:if for var這樣的代碼不是表達式。

<!DOCTYPE html>
<html>
<head>
	<title></title>
	<meta charset="utf-8">
	<script type="text/javascript" src="js/vue.js"></script>
</head>
<body>
<div id="app">
	<div>{{message}}</div>
	<div v-once>只描繪一次:{{message}}</div>
</div>
</body>
<script type="text/javascript">
	var v = new Vue({
		el: "#app",
		data: {
			message: "你好世界!"
		}
	})
</script>
</html>

1-3. VUE條件分支指令

指令(Directives)是帶有v-前綴的特殊屬性。

<p v-if="flag">這是一個神祕的指令</p>

<a v-bind:href="url">鏈接</a>

<a v-on:click="doSomething">測試</a>

v-if=“表達式”

控制節點的渲染或移除

v-if與v-show的區別:

v-if 是惰性的:如果在初始渲染時條件爲假,則什麼也不做——直到條件第一次變爲真時,纔會開始渲染條件塊。

相比之下,v-show 就簡單得多——不管初始條件是什麼,元素總是會被渲染,並且只是簡單地基於CSS 進行切換。

<!DOCTYPE html>
<html>
<head>
	<title></title>
	<meta charset="utf-8">
	<script type="text/javascript" src="js/vue.js"></script>
</head>
<body>
<div id="app">
	<div>{{message}}</div>
	<div v-once>只描繪一次:{{message}}</div>
	<hr>
	<div>{{htmlMsg}}</div>
	<div v-html="htmlMsg"></div>

	<hr>
	<button v-bind:disabled="flag">按鈕</button>
</div>
</body>
<script type="text/javascript">
	var v = new Vue({
		el: "#app",
		data: {
			message: "你好世界!",
			htmlMsg: "<h1>我是新來的,請多關照!!!</h1><input type='text'>",
			flag: true
		}
	})
</script>
</html>

1-4. 循環指令

我們用v-for 指令根據一組數組的選項列表進行渲染。

v-for 指令需要以item in items 形式的特殊語法,items 是源數據數組並且item 是數組元素迭代的別名。

例如:

<ul id=“app">
	<li v-for="item in items">
	{{ item.message}}
	</li>
</ul>

v-for 還支持一個可選的第二個參數爲當前項的索引。

<ul id="example-2">
	<li v-for="(item, index) in items">序號:
	{{ index }} 內容:{{ item.message}}
	</li>
</ul>

也可以用of 替代in 作爲分隔符,因爲它是最接近JavaScript 迭代器的語法:

<div v-for="item of items">{{item}}</div>

可以作爲循環對象的,除了數組以外也可以是對象。
在這裏插入圖片描述
也可以提供第二個的參數爲鍵名

第三個參數爲索引

整數迭代:

<div>
  <span v-for="n in 10">{{ n }} </span>
</div>

輸出結果爲:
在這裏插入圖片描述

<!DOCTYPE html>
<html>
<head>
	<title></title>
	<meta charset="utf-8">
	<script type="text/javascript" src="js/vue.js"></script>
</head>
<body>
<div id="app">
	<div>{{message}}</div>
	<div v-once>只描繪一次:{{message}}</div>
	<hr>
	<div>{{htmlMsg}}</div>
	<div v-html="htmlMsg"></div>

	<hr>
	<button v-bind:disabled="flag">按鈕</button>

	<hr>
	<p>加法的結果是:{{x + y}}</p>
	<p>{{ isMan ? "男生" : "女生"}}</p>
	<p> {{strText.split('').reverse().join('')}}</p>
</div>
</body>
<script type="text/javascript">
	var v = new Vue({
		el: "#app",
		data: {
			message: "你好世界!",
			htmlMsg: "<h1>我是新來的,請多關照!!!</h1><input type='text'>",
			flag: true,
			x: 12,
			y: 13,
			isMan: true,
			strText: "abcdefg"
		}
	})
</script>
</html>

1-5. 事件處理

使用v-on:事件名來監聽事件。例如v-on:click監聽點擊事件。
在這裏插入圖片描述
v-on簡寫@例如:v-on:click 寫爲 @click

  • 事件修飾符
    在這裏插入圖片描述
  • 鍵值修飾符
    在這裏插入圖片描述
<!DOCTYPE html>
<html>
<head>
	<title></title>
	<meta charset="utf-8">
	<script type="text/javascript" src="js/vue.js"></script>
</head>
<body>
<div id="app">
	<p v-if="flag">這是一個測試v-if指令的節點</p>
	<p v-if="level === 1">這是管理員</p>
	<p v-else-if="level === 2">這是普通用戶</p>
	<p v-else>對不起您沒有權限</p>
	<hr>
	<p v-show="level === 1">這是管理員</p>
</div>
</body>
<script type="text/javascript">
	var v = new Vue({
		el: "#app",
		data: {
			flag: false,
			level: 1
		}
	})
</script>
</html>

1-6. 表單輸入綁定

v-model 指令在表單控件元素上創建雙向數據綁定。
它會根據控件類型自動選取正確的方法來更新元素。

v-model 會忽略所有表單元素的value、checked、selected 特性的初始值。
因爲它會選擇Vue實例數據來作爲具體的值。
你應該通過JavaScript 在組件的data 選項中聲明初始值。

修飾符

  • .lazy在默認情況下,v-model 在input 事件中同步輸入框的值與,但可以添加一個修飾符lazy ,從而轉變爲在change 事件中同步。
  • .number如果想自動將用戶的輸入值轉爲Number 類型(如果原值的轉換結果爲NaN則返回原值),可以添加一個修飾符number 給v-model 來處理輸入值。
  • .trim如果要自動過濾用戶輸入的首尾空格,可以添加trim 修飾符到v-model 上過濾輸入。
<!DOCTYPE html>
<html>
<head>
	<title></title>
	<meta charset="utf-8">
	<script type="text/javascript" src="js/vue.js"></script>
</head>
<body>
<div id="app">
	<input type="text" v-model="text1" />
	<br>
	{{text1}}
	<hr>
	<textarea v-model="longText"></textarea>
	<br>
	<p style="white-space: pre-line;">
		{{longText}}
	</p>
	<hr>
	<input type="checkbox" value="goodmorning" v-model="chk">
	<br>
	{{chk}}
	<div v-if="chk">
		要顯示的大段內容
	</div>
	<hr>
	<label><input type="radio" v-model="hobit" value="旅遊">旅遊</label>
	<label><input type="radio" v-model="hobit" value="逛喫">逛喫</label>
	<label><input type="radio" v-model="hobit" value="看電影">看電影</label>
	<br>
	{{hobit}}
	<hr>
	<h2>修飾符</h2>
	<input type="text" v-model.lazy="lazyvalue">
	<br>
	{{lazyvalue}}
	<hr>
	<input type="text" v-model.number="x">
	+
	<input type="text" v-model.number="y">
	= {{x + y}}
	<hr>
	<input type="text" v-model.trim="tValue">
	<p style="white-space: pre-line;">{{tValue}}</p>
</div>
</body>
<script type="text/javascript">
	var v = new Vue({
		el: "#app",
		data: {
			text1: "hello world",
			longText: "這是一段很長的文字",
			chk: false,
			hobit: "",
			lazyvalue: "init",
			x: 0,
			y: 0,
			tValue: " 123"
		}
	})
</script>
</html>

1-7. 樣式表處理

class的綁定

語法一:v-bind:class=“{ class名: 條件}"

例如:

<div v-bind:class="{ active: isActive}"></div>

語法二:v-bind:class=“對象"

例如:
在這裏插入圖片描述
語法三:

v-bind:class=[變量1, 變量2, 變量3...]"

例如:
在這裏插入圖片描述
內聯樣式的綁定

語法一:v-bind:style=“對象名”

例如:
在這裏插入圖片描述
語法二:v-bind:style=“[樣式對象1, 樣式對象2]”

例如:
在這裏插入圖片描述
當v-bind:style使用需要特定前綴的CSS 屬性時,如transform,Vue.js 會自動偵測並添加相應的前綴。

樣式綁定

<!DOCTYPE html>
<html>
<head>
	<title></title>
	<meta charset="utf-8">
	<script type="text/javascript" src="js/vue.js"></script>
	<style type="text/css">
		.redC {
			height: 100px;
			width: 200px;
			background: red;
			transition-duration: 1s;
		}
		.bigger {
			width: 300px;
			height: 200px;
		}
		.bluebox {
			background: blue;
		}
	</style>
</head>
<body>
<div id="app">
	<div v-bind:class="{redC: isFlag, bigger: bigFlag}"></div>
	<hr>
	<div v-bind:class="cssObject"></div>
	<hr>
	<div v-bind:class="[cls1, cls2]"></div>
	<hr>
	<div v-bind:style="{height: ht, width: wt, background: bg}"></div>
	<hr>
	<div v-bind:style="[cssObj1, cssObj2]"></div>
</div>
</body>
<script type="text/javascript">
	var v = new Vue({
		el: "#app",
		data: {
			isFlag: true,
			bigFlag: false,
			cssObject: {redC: true, bigger: true},
			cls1: "bluebox",
			cls2: "bigger",
			ht: "20px",
			wt: "20px",
			bg: "pink",
			cssObj1: {
				height: "50px",
				width: "50px"
			},
			cssObj2: {
				background: "blue",
				transform: "rotate(50deg)"
			}
		}
	})
</script>
</html>

1-8. 計算屬性(略)

1-9. 過濾器

Vue.js 允許你自定義過濾器,可被用作一些常見的文本格式化。

過濾器可以用在兩個地方:

  • mustache 插值
  • v-bind 表達式

在這裏插入圖片描述
在filters對象中聲明過濾器,返回值作爲過濾器的運算結果。

過濾器允許串聯使用

在這裏插入圖片描述

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