
批改狀態(tài):合格
老師批語:
使用 vue 渲染頁面要先進(jìn)行 vue 庫的導(dǎo)入,和 jQuery 一樣,可以通過 script 標(biāo)簽引入,可以在vue 官網(wǎng)上找到
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
使用 vue 進(jìn)行頁面渲染時(shí)第一步時(shí)先將 vue 加載進(jìn)來,上邊已經(jīng)做過了,接下來在 html 文檔中創(chuàng)建一個(gè) Vue 根節(jié)點(diǎn)
<h2 class="title">{{words}}</h2>
然后使用 vue 對頁面進(jìn)行渲染
<script>
// 創(chuàng)建一個(gè)vue實(shí)例
const vm = new Vue({
// 當(dāng)前Vue的配置項(xiàng)
// 掛載點(diǎn)
// el: document.querySelector('.app'),
// Vue中可以識(shí)別選擇器的
el: ".app",
// 數(shù)據(jù)注入
data: {
words: "Hello World!",
},
});
</script>
如果說是需要對 vue 中的原始數(shù)據(jù)進(jìn)行訪問,則需要通過在數(shù)據(jù)前加上 “$” 來進(jìn)行訪問,比如說是要訪問上邊例子中的 data 里邊的 words 數(shù)據(jù)
<script>
console.log(vm.$data.words);
// 輸出 "Hello World!";
</script>
使用 vue 對頁面進(jìn)行渲染時(shí),dom 元素中是不會(huì)存在文本的,所有的文本數(shù)據(jù)都是通過 vue 實(shí)例添加上去的。所以當(dāng) vue 中的數(shù)據(jù)發(fā)生變化時(shí),相應(yīng)的頁面中的數(shù)據(jù)也會(huì)發(fā)生變化。vue 中數(shù)據(jù)渲染到頁面上的過程叫做 “數(shù)據(jù)注入”。
1. v-text, v-html 指令
使用以下示例作為演示
<div class="app">
<p></p>
</div>
<script>
const vm = new Vue({
// 轉(zhuǎn)換效率最高
// el:document.querySelector('.app'),
el: ".app",
// vue的掛載點(diǎn)不能掛到body或者h(yuǎn)tml上,因?yàn)樗麄兙哂形ㄒ恍?/span>
data: {
userName: "我的名字就是這么長,驚不驚喜意不意外!",
},
});
</script>
v-text, v-html 在 html 中是不存在這樣的屬性的,它是專門由 Vue 實(shí)例管理的自定義屬性,稱之為“指令”。
v-text 指令 ====> innerText,textContent,它會(huì)覆蓋掉原來的文本內(nèi)容。
<p v-text="userName"></p>
可以看到的是,當(dāng)前的 html 文檔中是沒有文本存在的,所有的文本數(shù)據(jù)都是從 vue 實(shí)例中添加進(jìn)去的。
v-html 指令 ====> innerHTML, 它里邊就不僅僅是純文本了,還可以是 html 字符串
<p v-text="userName"></p>
<script>
vm.userName =
"<em style='color:red'>我的名字就是這么長,驚不驚喜意不意外!</em>";
</script>
使用 v-html 指令,它里邊的內(nèi)容可以是純文本,也可以是 html 字符串
2. v-bind, v-on 指令
v-bind 指令是一個(gè)高頻指令,它的作用是動(dòng)態(tài)地綁定一個(gè)或多個(gè) 屬性,或一個(gè)組件 prop 到表達(dá)式。它可以簡寫成 “:”。
示例
<style>
.active {
color: violet;
}
.bigger {
font-size: 2rem;
}
</style>
<body>
<div class="app">
<!-- <p style="color: pink">style: {{site}}</p> -->
<!-- v-bind不僅可以綁定行內(nèi)樣式,對于類樣式也是可以綁定的 -->
<p :style="style">style: {{site}}</p>
<!-- 綁定類class屬性 -->
<p :class="class1">class1: {{site}}</p>
<p :class="{active : isActive, bigger : isBigger}">class2: {{site}}</p>
<p :class="[`active`, `bigger`]">class3: {{site}}</p>
</div>
<script>
const vm = new Vue({
el: ".app",
// 數(shù)據(jù)
data: {
site: "php中文網(wǎng)",
style: "color: pink",
class1: "active bigger",
isActive: true,
isBigger: false,
},
});
</script>
</body>
v-on 指令:綁定事件監(jiān)聽器。事件類型由參數(shù)指定。表達(dá)式可以是一個(gè)方法的名字或一個(gè)內(nèi)聯(lián)語句,如果沒有修飾符也可以省略。v-on 指令同樣是一個(gè)高頻指令,它可以簡寫成 “@”
示例
<body>
<div class="app">
<p>
<a href="https://php.cn" @click.prevent="show"
>顯示網(wǎng)站名稱,阻止默認(rèn)行為</a
>
</p>
<p>
<a href="https://php.cn" @click.prevent="show"
>顯示網(wǎng)站名稱,冒泡行為演示</a
>
</p>
<!-- 事件修飾符stop:阻止冒泡行為 -->
<p>
<a href="https://php.cn" @click.prevent.stop="show"
>顯示網(wǎng)站名稱,阻止冒泡行為</a
>
</p>
<!-- 事件的回調(diào)函數(shù)僅允許執(zhí)行一次 -->
<p>
<a href="https://php.cn" @click.once.stop.prevent="show"
>顯示網(wǎng)站名稱,事件的回調(diào)函數(shù)僅允許執(zhí)行一次</a
>
</p>
<!-- 事件方法的傳參 -->
<!-- 事件對象的參數(shù)名必須是 $event -->
<button @click="handle($event,1,2)">click</button>
</div>
<script>
const vm = new Vue({
el: ".app",
// 數(shù)據(jù)
data: {
site: "php中文網(wǎng)",
style: "color: pink",
class1: "active bigger",
isActive: true,
isBigger: false,
},
// 方法(函數(shù))
methods: {
show() {
// 在當(dāng)前的Vue實(shí)例中,this就是vue實(shí)例對象
alert(this.site);
},
handle(ev, a, b) {
console.log(ev.type, ev.target);
console.log("a + b = %d", a + b);
},
},
});
</script>
</body>
事件修飾符
調(diào)用 event.stopPropagation(),阻止冒泡行為;
調(diào)用 event.preventDefault(),禁用事件的默認(rèn)行為;
只觸發(fā)一次回調(diào);
除了這幾個(gè)修飾符之外還有好多的事件修飾符,具體請到vue 官網(wǎng)中查看
3. v-model 雙向綁定指令
一般情況下頁面上的數(shù)據(jù)都是響應(yīng)式的,也就是單向綁定,就是頁面中的數(shù)據(jù)隨著 vue 實(shí)例中的數(shù)據(jù)變化而變化,而 v-model 指令的作用就是在表單控件或者組件上創(chuàng)建雙向綁定。只要任何一方的數(shù)據(jù)發(fā)生變動(dòng),另一方的數(shù)據(jù)也會(huì)發(fā)生變化。
示例
<body>
<div class="app">
<!-- 頁面中的數(shù)據(jù) -->
<!-- 響應(yīng)式:當(dāng)前頁面中的數(shù)據(jù)始終跟著模型數(shù)據(jù)的變化而變化 -->
<p>模型中的數(shù)據(jù):{{site}}</p>
<>雙向綁定:<input type="text" v-model="site" /></>
<!-- 懶加載事件修飾符lazy,防止頁面刷新頻繁 -->
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.12/dist/vue.js"></script>
<script>
const vm = new Vue({
el: ".app",
data: {
// 模型中的數(shù)據(jù)
site: "php中文網(wǎng)",
num: 0,
},
});
// vm.site = "php.cn";
</script>
</body>
這樣在頁面端的數(shù)據(jù)發(fā)生變化時(shí),vue 實(shí)例中的數(shù)據(jù)也會(huì)發(fā)生變化
4. v-for
v-for:簡單來說就是遍歷一個(gè)數(shù)組/對象,不過在 vue 中的 v-for 不是那么簡單,它可以用來動(dòng)態(tài)的生成列表。
v-for 的默認(rèn)行為會(huì)嘗試原地修改元素而不是移動(dòng)它們。要強(qiáng)制其重新排序元素,你需要用特殊屬性 key 來提供一個(gè)排序提示。key 只能是整數(shù)或是不重復(fù)的字符串,只有唯一,它才可以作為排序時(shí)的關(guān)鍵信息。
示例
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<title>v-for,key指令</title>
</head>
<body>
<div class="app">
<!-- key指令可以干涉diff算法,key一定是穩(wěn)定且唯一的,vue通過key來判斷這個(gè)節(jié)點(diǎn)是否需要重新渲染,以提升效率 -->
<!-- 遍歷一個(gè)數(shù)組 -->
<ul>
<li v-for="(item,index) in items" :key="index">{{index}}--{{item}}</li>
</ul>
<!-- 遍歷一個(gè)對象 -->
<ul>
<li v-for="(item,prop,index) in user" :key="index">
{{prop}}--{{index}}--{{item}}
</li>
</ul>
<!-- key只能是整數(shù)或是不重復(fù)的字符串 -->
<!-- 遍歷一個(gè)對象數(shù)組 -->
<ul>
<li v-for="(user,index) in users" :key="user.id">
{{user.id}}--{{user.name}}--{{user.age}}
</li>
</ul>
<span v-for="n in 10">{{n}}</span>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.12/dist/vue.js"></script>
<script>
const vm = new Vue({
el: ".app",
data: {
//數(shù)組
items: ["小紅", "小綠", "小藍(lán)"],
// 對象
user: {
name: "小蘭",
age: 18,
},
// 對象數(shù)組,使用最頻繁的,數(shù)據(jù)表的查詢結(jié)果就是一個(gè)這樣的二維JSON
users: [
{ id: 1, name: "皮卡丘", age: 2 },
{ id: 2, name: "噴火龍", age: 4 },
{ id: 3, name: "皮皮蝦", age: 6 },
],
},
});
</script>
</body>
</html>
下圖是對 vue 中數(shù)據(jù)的遍歷情況
下圖是生成的元素與遍歷情況的對應(yīng)
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號