一、什么是Vue?
1. vue為我們提供了構建用戶界面的漸進式框架,讓我們不再去操作dom元素,直接對數據進行操作,讓程序員不再浪費時間和精力在操作dom元素上,解放了雙手,程序員只需要關心業務,提高了開發效率。
2. 框架和庫的區別
框架是一整套解決方案,對項目的侵入性較大,項目如果需要更換框架的話,則需要重新架構整個項目
庫(相當於是一個插件)提供了某一個功能,對項目入侵性小,如果當前這個庫無法滿足某些功能的話,可以很容易的切換到其他庫,完成該需求
3. vue的基本語句:
var vm = new Vue({/* 根實例 */ el : '#app', // 指向的哪個元素(實例的掛載目標) data : { msg:"你好" }, // 所有根實例下的數據 methods : {} // 所有根實例下的方法區別 });
此時我們如果想要把msg中的數據渲染到頁面上 需要用到以下方法:
<div id="app">
<div>{{msg}}</div>
<div v-text="msg"></div>
<div v-html="msg"></div>
</div>
4. {{}} 和 v-text v-html 三者之間的區別:
用{{}}取值的話會產生閃爍問題,但是不會覆蓋元素中原來的內容
用v-text取值的話沒有閃爍問題,但是會覆蓋元素中原來的內容
用v-html取值沒有閃爍問題,與前兩者不同之處在於v-html可以將數據里面的內容按照html的格式去進行解析
msg:"<h3>你好</h3>" //這種數據的話就得用v-html進行解析了 其他兩者不會將h3轉換為標簽
頁面最終的輸出結果

5. 下面來說一說如何解決閃爍問題
這里又用到了一個新的指令:v-cloak
<div id="app" v-cloak> //這個指令一般建議添加到掛載vue元素上 這樣它里面的元素也不會有閃爍問題了
css代碼:
<style>
[v-cloak]{display: none;} //在樣式里面用屬性選擇器選擇我們的v-cloak指令 然后寫個隱藏樣式
</style>
下面來說一說v-for的使用:
<!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>
<!-- 以前拼字符串innerhtml -->
<!-- vue提供了一個指令 V-for 解決循環問題 更高效 會復用原有的格式 -->
<div id="app" v-cloak>
<!-- 去除閃爍 -->
<!-- 要循環誰 就在誰的身上增加V-for屬性 -->
<!-- 默認是value of 數組 (value,index) -->
<ul>
<li v-for="(fruit,index) in fruits">
{{fruit.name}} {{index+1}}
<ul>
<li v-for="(c,chlidindex) in fruit.color">
{{c}}{{index+1}}.{{chlidindex+1}}
</li>
</ul>
</li>
</ul>
<div v-for="c in 'aaaa'">{{c}}</div>
<div v-for="c in 30">{{c}}</div>
<div v-for="(value,key,index) in obj">{{value}}:{{key}}:{{index}}</div>
<div @click="show">aaaaa</div>
</div>
<script src="../node_modules\vue\dist\vue.js"></script>
<script>
var vm = new Vue({
el:"#app",
data:{
obj:{name:'zfpx',age:9,address:"xxx"},
fruits:[
{name:"香蕉",color:['green','yellow']},
{name:"蘋果",color:['red','green']},
{name:"西瓜",color:['pink']}]
},
methods:{
show:function () {
alert("123");
}
}
})
</script>
</body>
</html>
下面說一說v-model 實現雙向的數據綁定:
<!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>
</head>
<body>
<div id="app">
<h1>{{msg}}</h1>
<!-- v-bind 只能實現數據的單向綁定 從 M 自動綁定到 V中去 無法實現數據的雙向綁定 -->
<!-- 使用v-model指令 可以實現表單元素和model中數據的雙向數據綁定 -->
<!-- v-model 只能用在表單元素中 -->
<!-- input text address -->
<input type="text" v-model='msg'>
</div>
<script src='../node_modules/vue/dist/vue.js'></script>
<script>
var vm = new Vue({
el:"#app",
data:{
msg:'你好啊'
},
})
</script>
</body>
</html>
這個是剛打開瀏覽器時的狀態

然后去控制台修改數據,就實現了雙向的數據綁定

下面說一說vue中行內樣式的設置
<!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>
*{
margin: 0;
padding: 0;
}
.red{
color: red;
}
.italic{
font-style: italic;
}
.active{
letter-spacing: 0.5em;
}
.then{
font-weight: 220;
}
</style>
</head>
<body>
<div id="app">
<!-- 這是第一種使用方式 直接傳遞一個數組 注意 這里的class需要使用v-bind做數據綁定 -->
<!-- <h1 :class="['italic','then']">這是一個很大很大的h1,大到你無法想象</h1> -->
<!-- 在數組中使用三元表達式 -->
<!-- <h1 :class="['italic','then',flag? 'active':'']">這是一個很大很大的h1,大到你無法想象</h1> -->
<!-- 在數組中使用對象來代替三元表達式 提高代碼的可讀性 -->
<!-- <h1 :class="['italic','then',{'active':flag}]">這是一個很大很大的h1,大到你無法想象</h1> -->
<!-- 在為class使用 v-bind綁定對象的時候 對象的屬性是類名 由於對象的屬性可帶引號可不帶,屬性的值是一個標識符 -->
<h1 :class="classobj">這是一個很大很大的h1,大到你無法想象</h1>
</div>
<script src="../node_modules/vue/dist/vue.js"></script>
<script>
var vm = new Vue({
el : '#app',
data : {
flag:true,
classobj:{red:true,then:true,italic:false,active:false}
},
methods : {}
});
</script>
</body>
</html>
下面說一說vue中的事件修飾符
<!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>
</head>
<body>
<div id="app">
<div @click="one">
<!-- 使用.stop來進行阻止冒泡 -->
<button @click.stop="two">第二個按鈕</button>
</div>
<!-- 使用.prevent來進行阻止冒泡 -->
<a href="https://www.baidu.com" @click.prevent='linkc'>我要去百度</a>
<!-- 使用.capture 實現捕獲觸發事件的機智-->
<div @click.capture="one">
<button @click="two">第二個按鈕</button>
</div>
<!-- 使用.self 只會阻止自己身上冒泡行為的觸發 並不會真正阻止別的事件中-->
<div @click.self="one">
<button @click="two">第二個按鈕</button>
</div>
</div>
<script src='../node_modules/vue/dist/vue.js'></script>
<script>
var vm = new Vue({
el:"#app",
data:{
},
methods:{
one(){
alert(1)
},
two(){
alert(2)
},
linkc(){
console.log('觸發了鏈接的事件');
}
}
})
</script>
</body>
</html>
