1.v-cloak
使用 v-cloak 防止頁面加載時出現 vuejs 的變量名
<div id="app">
{{msg}}
</div>
HTML 綁定 Vue執行個體,在頁面加載時會閃爍
v-cloak 可以解決這一問題,在 css 中加上
[v-cloak] {
display: none;
}
這段 CSS 的含義是,包含 v-cloak (cloak n. 披風,鬥篷;vt. 遮蓋,掩蓋) 屬性的 html 标簽在頁面初始化時會被隐藏。
Vue1.x 與 Vue2 中 v-cloak 的不同
Vue1 中,允許将 Vue 執行個體挂載在 body 上,而 Vue2 是不允許的,想對整個頁面執行個體化,需要另外用一個 div 來容納整個頁面内容,對其進行執行個體化
這樣在使用 v-cloak 時,同樣需要用到這種方法
為什麼我用的 v-cloak 無效?
在實際項目中,我們常通過 @import 來加載 css 檔案
@import "style.css"
@import "index.css"
而 @import 是在頁面 DOM 完全載入後才會進行加載,如果我們将 [v-cloak] 寫在 @import 加載的 css 檔案中,就會導緻頁面仍舊閃爍。
為了避免這種情況,我們可以将 [v-cloak] 寫在 link 引入的 css 中,或者寫一個内聯 css 樣式,這樣就得到了解決。
2.v-text
<p v-cloak> {{ msg }} </p>
輸出的内容和
<h4 v-text="msg"></h4>
是一樣的,但是後者不會有閃爍問題
<h4 v-text="msg">==================</h4>
該代碼浏覽器會先顯示 ==================,頁面加載完成後會顯示msg所代表的内容,也就是說v-text會覆寫元素中原本的内容
但以下代碼不同
<p v-cloak>++++++++ {{ msg }} ----------</p>
插值表達式 隻會替換自己的這個占位符,不會把 整個元素的内容清空
3.v-html
當vue執行個體data裡面有HTML格式的代碼時
data: {
msg: '123',
msg2: '<h1>哈哈,我是一個大大的H1, 我大,我驕傲</h1>'
}
我們不想把msg2像msg一樣當成字元串輸出,那麼就用v-html
<div v-html="msg2"></div>
div标簽之間也可以寫入文本,和v-text一樣,加載完畢後msg2所表示的東西會替代該文本。
4.v-bind
vue執行個體中
data: {
msg: '123',
msg2: '<h1>哈哈,我是一個大大的H1, 我大,我驕傲</h1>',
mytitle: '這是一個自己定義的title'
}
下面第一行代碼,在網頁中滑鼠移動到按鈕時會顯示123,
第二三行代碼,會顯示 這是一個自己定義的title123,這裡用了v-bind
<input type="button" value="按鈕" title="123">
<input type="button" value="按鈕" v-bind:title="mytitle + '123'">
<input type="button" value="按鈕" :title="mytitle + '123'"> 和上一行是等價的
<!-- v-bind: 是 Vue中,提供的用于綁定屬性的指令 -->
<!-- 注意: v-bind: 指令可以被簡寫為 :要綁定的屬性 -->
<!-- v-bind 中,可以寫合法的JS表達式 -->
5.v-on
<!-- Vue 中提供了 v-on: 事件綁定機制 -->
<input type="button" value="按鈕" :title="mytitle + '123'" v-on:click="alert('hello')">
點選會彈出一個hello的對話框
<input type="button" value="按鈕" @click="show">
vue執行個體中
methods: { // 這個 methods屬性中定義了目前Vue執行個體所有可用的方法
show: function () {
alert('Hello')
}
}
document.getElementById('btn').onclick = function(){
alert('Hello')
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
[v-cloak] {
/* display: none; */
}
</style>
</head>
<body>
<div id="app">
<!-- 使用 v-cloak 能夠解決 插值表達式閃爍的問題 -->
<p v-cloak>++++++++ {{ msg }} ----------</p>
<h4 v-text="msg">==================</h4>
<!-- 預設 v-text 是沒有閃爍問題的 -->
<!-- v-text會覆寫元素中原本的内容,但是 插值表達式 隻會替換自己的這個占位符,不會把 整個元素的内容清空 -->
<div>{{msg2}}</div>
<div v-text="msg2"></div>
<div v-html="msg2">1212112</div>
<!-- v-bind: 是 Vue中,提供的用于綁定屬性的指令 -->
<!-- <input type="button" value="按鈕" v-bind:title="mytitle + '123'"> -->
<!-- 注意: v-bind: 指令可以被簡寫為 :要綁定的屬性 -->
<!-- v-bind 中,可以寫合法的JS表達式 -->
<!-- Vue 中提供了 v-on: 事件綁定機制 -->
<input type="button" value="按鈕" :title="mytitle + '123'" v-on:click="alert('hello')">
<!-- <input type="button" value="按鈕" @click="show">-->
</div>
<script src="./lib/vue-2.4.0.js"></script>
<script>
var vm = new Vue({
el: '#app',
data: {
msg: '123',
msg2: '<h1>哈哈,我是一個大大的H1, 我大,我驕傲</h1>',
mytitle: '這是一個自己定義的title'
},
methods: { // 這個 methods屬性中定義了目前Vue執行個體所有可用的方法
show: function () {
alert('Hello')
}
}
})
/* document.getElementById('btn').onclick = function(){
alert('Hello')
} */
</script>
</body>
</html>
<!-- 1. 如何定義一個基本的Vue代碼結構 -->
<!-- 2. 插值表達式 和 v-text -->
<!-- 3. v-cloak -->
<!-- 4. v-html -->
<!-- 5. v-bind Vue提供的屬性綁定機制 縮寫是 : -->
<!-- 6. v-on Vue提供的事件綁定機制 縮寫是 @ -->