官方地址javascript
<style type="text/css"> /* 一、經過屬性選擇器 選擇到 帶有屬性 v-cloak的標籤 讓他隱藏 */ [v-cloak]{ /* 元素隱藏 */ display: none; } </style> <body> <div id="app"> <!-- 二、 讓帶有插值 語法的 添加 v-cloak 屬性 在 數據渲染完場以後,v-cloak 屬性會被自動去除, v-cloak一旦移除也就是沒有這個屬性了 屬性選擇器就選擇不到該標籤 也就是對應的標籤會變爲可見 --> <div v-cloak >{{msg}}</div> </div> <script type="text/javascript" src="js/vue.js"></script> <script type="text/javascript"> var vm = new Vue({ // el 指定元素 id 是 app 的元素 el: '#app', // data 裏面存儲的是數據 data: { msg: 'Hello Vue' } }); </script> </body> </html>
<div id="app"> <!-- 注意:在指令中不要寫插值語法 直接寫對應的變量名稱 在 v-text 中 賦值的時候不要在寫 插值語法 通常屬性中不加 {{}} 直接寫 對應 的數據名 --> <p v-text="msg"></p> <p> <!-- Vue 中只有在標籤的 內容中 才用插值語法 --> {{msg}} </p> </div> <script> new Vue({ el: '#app', data: { msg: 'Hello Vue.js' } }); </script>
v-html
,永不用在用戶提交的內容上<div id="app"> <p v-html="html"></p> <!-- 輸出:html標籤在渲染的時候被解析 --> <p>{{message}}</p> <!-- 輸出:<span>經過雙括號綁定</span> --> <p v-text="text"></p> <!-- 輸出:<span>html標籤在渲染的時候被源碼輸出</span> --> </div> <script> let app = new Vue({ el: "#app", data: { message: "<span>經過雙括號綁定</span>", html: "<span>html標籤在渲染的時候被解析</span>", text: "<span>html標籤在渲染的時候被源碼輸出</span>", } }); </script>
<span v-pre>{{ this will not be compiled }}</span> <!-- 顯示的是{{ this will not be compiled }} --> <span v-pre>{{msg}}</span> <!-- 即便data裏面定義了msg這裏仍然是顯示的{{msg}} --> <script> new Vue({ el: '#app', data: { msg: 'Hello Vue.js' } }); </script>
<!-- 即便data裏面定義了msg 後期咱們修改了 仍然顯示的是第一次data裏面存儲的數據即 Hello Vue.js --> <span v-once>{{ msg}}</span> <script> new Vue({ el: '#app', data: { msg: 'Hello Vue.js' } }); </script>
<input>、<select>、<textarea>、components
中使用<div id="app"> <div>{{msg}}</div> <div> 當輸入框中內容改變的時候, 頁面上的msg 會自動更新 <input type="text" v-model='msg'> </div> </div>
m modelcss
v view 視圖html
vm (view-model) 控制器 將數據和視圖層創建聯繫前端
<body> <div id="app"> <div>{{num}}</div> <div> <!-- 若是事件直接綁定函數名稱,那麼默認會傳遞事件對象做爲事件函數的第一個參數 --> <button v-on:click='handle1'>點擊1</button> <!-- 二、若是事件綁定函數調用,那麼事件對象必須做爲最後一個參數顯示傳遞, 而且事件對象的名稱必須是$event --> <button v-on:click='handle2(123, 456, $event)'>點擊2</button> </div> </div> <script type="text/javascript" src="js/vue.js"></script> <script type="text/javascript"> var vm = new Vue({ el: '#app', data: { num: 0 }, methods: { handle1: function(event) { console.log(event.target.innerHTML) }, handle2: function(p, p1, event) { console.log(p, p1) console.log(event.target.innerHTML) this.num++; } } }); </script>
event.preventDefault()
或 event.stopPropagation()
是很是常見的需求。v-on
提供了事件修飾符<!-- 阻止單擊事件繼續傳播 --> <a v-on:click.stop="doThis"></a> <!-- 提交事件再也不重載頁面 --> <form v-on:submit.prevent="onSubmit"></form> <!-- 修飾符能夠串聯 即阻止冒泡也阻止默認事件 --> <a v-on:click.stop.prevent="doThat"></a> <!-- 只當在 event.target 是當前元素自身時觸發處理函數 --> <!-- 即事件不是從內部元素觸發的 --> <div v-on:click.self="doThat">...</div> 使用修飾符時,順序很重要;相應的代碼會以一樣的順序產生。所以,用 v-on:click.prevent.self 會阻止全部的點擊,而 v-on:click.self.prevent 只會阻止對元素自身的點擊。
v-on
在監聽鍵盤事件時添加按鍵修飾符<!-- 只有在 `keyCode` 是 13 時調用 `vm.submit()` --> <input v-on:keyup.13="submit"> <!-- -當點擊enter 時調用 `vm.submit()` --> <input v-on:keyup.enter="submit"> <!--當點擊enter或者space時 時調用 `vm.alertMe()` --> <input type="text" v-on:keyup.enter.space="alertMe" > 經常使用的按鍵修飾符 .enter => enter鍵 .tab => tab鍵 .delete (捕獲「刪除」和「退格」按鍵) => 刪除鍵 .esc => 取消鍵 .space => 空格鍵 .up => 上 .down => 下 .left => 左 .right => 右 <script> var vm = new Vue({ el:"#app", methods: { submit:function(){}, alertMe:function(){}, } }) </script>
config.keyCodes
自定義按鍵修飾符別名<div id="app"> 預先定義了keycode 116(即F5)的別名爲f5,所以在文字輸入框中按下F5,會觸發prompt方法 <input type="text" v-on:keydown.f5="prompt()"> </div> <script> Vue.config.keyCodes.f5 = 116; let app = new Vue({ el: '#app', methods: { prompt: function() { alert('我是 F5!'); } } }); </script>
<!-- 綁定一個屬性 --> <img v-bind:src="imageSrc"> <!-- 縮寫 --> <img :src="imageSrc">
一、 v-bind 中支持綁定一個對象 若是綁定的是一個對象 則 鍵爲 對應的類名 值 爲對應data中的數據 <!-- HTML最終渲染爲 <ul class="box textColor textSize"></ul> 注意: textColor,textSize 對應的渲染到頁面上的CSS類名 isColor,isSize 對應vue data中的數據 若是爲true 則對應的類名 渲染到頁面上 當 isColor 和 isSize 變化時,class列表將相應的更新, 例如,將isSize改爲false, class列表將變爲 <ul class="box textColor"></ul> --> <ul class="box" v-bind:class="{textColor:isColor, textSize:isSize}"> <li>學習Vue</li> <li>學習Node</li> <li>學習React</li> </ul> <div v-bind:style="{color:activeColor,fontSize:activeSize}">對象語法</div> <sript> var vm= new Vue({ el:'.box', data:{ isColor:true, isSize:true, activeColor:"red", activeSize:"25px", } }) </sript> <style> .box{ border:1px dashed #f0f; } .textColor{ color:#f00; background-color:#eef; } .textSize{ font-size:30px; font-weight:bold; } </style>
二、 v-bind 中支持綁定一個數組 數組中classA和 classB 對應爲data中的數據 這裏的classA 對用data 中的 classA 這裏的classB 對用data 中的 classB <ul class="box" :class="[classA, classB]"> <li>學習Vue</li> <li>學習Node</li> <li>學習React</li> </ul> <script> var vm= new Vue({ el:'.box', data:{ classA:‘textColor‘, classB:‘textSize‘ } }) </script> <style> .box{ border:1px dashed #f0f; } .textColor{ color:#f00; background-color:#eef; } .textSize{ font-size:30px; font-weight:bold; } </style>
<div v-bind:style="styleObject">綁定樣式對象</div>' <!-- CSS 屬性名能夠用駝峯式 (camelCase) 或短橫線分隔 (kebab-case,記得用單引號括起來) --> <div v-bind:style="{ color: activeColor, fontSize: fontSize,background:'red' }">內聯樣式</div> <!--組語法能夠將多個樣式對象應用到同一個元素 --> <div v-bind:style="[styleObj1, styleObj2]"></div> <script> new Vue({ el: '#app', data: { styleObject: { color: 'green', fontSize: '30px', background:'red' }, activeColor: 'green', fontSize: "30px" }, styleObj1: { color: 'red' }, styleObj2: { fontSize: '30px' } </script>
<div id="app"> <!-- 判斷是否加載,若是爲真,就加載,不然不加載--> <span v-if="flag"> 若是flag爲true則顯示,false不顯示! </span> </div> <script> var vm = new Vue({ el:"#app", data:{ flag:true } }) </script> ---------------------------------------------------------- <div v-if="type === 'A'"> A </div> <!-- v-else-if緊跟在v-if或v-else-if以後 表示v-if條件不成立時執行--> <div v-else-if="type === 'B'"> B </div> <div v-else-if="type === 'C'"> C </div> <!-- v-else緊跟在v-if或v-else-if以後--> <div v-else> Not A/B/C </div> <script> new Vue({ el: '#app', data: { type: 'C' } }) </script>
v-show本質就是標籤display設置爲none,控制隱藏vue
v-if是動態的向DOM樹內添加或者刪除DOM元素java
<ul id="example-1"> <!-- 循環結構-遍歷數組 item 是咱們本身定義的一個名字 表明數組裏面的每一項 items對應的是 data中的數組--> <li v-for="item in items"> {{ item.message }} </li> </ul> <script> new Vue({ el: '#example-1', data: { items: [ { message: 'Foo' }, { message: 'Bar' } ], } }) </script>
v-if
和 v-for
v-if
與 v-for
一塊兒使用時,v-for
具備比 v-if
更高的優先級。<!-- 循環結構-遍歷對象 v 表明 對象的value k 表明對象的 鍵 i 表明索引 ---> <div v-if='v==13' v-for='(v,k,i) in obj'>{{v + '---' + k + '---' + i}}</div> <script> new Vue({ el: '#example-1', data: { items: [ { message: 'Foo' }, { message: 'Bar' } ], obj: { uname: 'zhangsan', age: 13, gender: 'female' } } }) </script>
key 的做用後端
<ul> <li v-for="item in items" :key="item.id">...</li> </ul>
` <div id="app"> <div class="tab"> <!-- tab欄 --> <ul> <li class="active">apple</li> <li class="">orange</li> <li class="">lemon</li> </ul> <!-- 對應顯示的圖片 --> <div class="current"><img src="img/apple.png"></div> <div class=""><img src="img/orange.png"></div> <div class=""><img src="img/lemon.png"></div> </div> </div> `
list: [{ id: 1, title: 'apple', path: 'img/apple.png' }, { id: 2, title: 'orange', path: 'img/orange.png' }, { id: 3, title: 'lemon', path: 'img/lemon.png' }]
把tab欄 中的數替換到頁面上數組
<div id="app"> <div class="tab"> <ul> <!-- 一、綁定key的做用 提升Vue的性能 二、 key 須要是惟一的標識 因此須要使用id, 也可使用index , index 也是惟一的 三、 item 是 數組中對應的每一項 四、 index 是 每一項的 索引 --> <li :key='item.id' v-for='(item,index) in list'>{{item.title}}</li> </ul> <div :key='item.id' v-for='(item, index) in list'> <!-- : 是 v-bind 的簡寫 綁定屬性使用 v-bind --> <img :src="item.path"> </div> </div> </div> <script> new Vue({ // 指定 操做元素 是 id 爲app 的 el: '#app', data: { list: [{ id: 1, title: 'apple', path: 'img/apple.png' }, { id: 2, title: 'orange', path: 'img/orange.png' }, { id: 3, title: 'lemon', path: 'img/lemon.png' }] } }) </script>
4.1 、讓默認的第一項tab欄高亮瀏覽器
tab欄高亮 經過添加類名active 來實現 (CSS active 的樣式已經提早寫好)安全
active 的類名
4.2 、讓默認的第一項tab欄對應的div 顯示
<ul> <!-- 動態綁定class 有 active 類名高亮 無 active 不高亮--> <li :class='currentIndex==index?"active":""' :key='item.id' v-for='(item,index) in list' >{{item.title}}</li> </ul> <!-- 動態綁定class 有 current 類名顯示 無 current 隱藏--> <div :class='currentIndex==index?"current":""' :key='item.id' v-for='(item, index) in list'> <!-- : 是 v-bind 的簡寫 綁定屬性使用 v-bind --> <img :src="item.path"> </div> <script> new Vue({ el: '#app', data: { currentIndex: 0, // 選項卡當前的索引 默認爲 0 list: [{ id: 1, title: 'apple', path: 'img/apple.png' }, { id: 2, title: 'orange', path: 'img/orange.png' }, { id: 3, title: 'lemon', path: 'img/lemon.png' }] } }) </script>
4.3 、點擊每個tab欄 當前的高亮 其餘的取消高亮
<div id="app"> <div class="tab"> <ul> <!-- 經過v-on 添加點擊事件 須要把當前li 的索引傳過去 --> <li v-on:click='change(index)' :class='currentIndex==index?"active":""' :key='item.id' v-for='(item,index) in list'>{{item.title}}</li> </ul> <div :class='currentIndex==index?"current":""' :key='item.id' v-for='(item, index) in list'> <img :src="item.path"> </div> </div> </div> <script> new Vue({ el: '#app', data: { currentIndex: 0, // 選項卡當前的索引 默認爲 0 list: [{ id: 1, title: 'apple', path: 'img/apple.png' }, { id: 2, title: 'orange', path: 'img/orange.png' }, { id: 3, title: 'lemon', path: 'img/lemon.png' }] }, methods: { change: function(index) { // 經過傳入過來的索引來讓當前的 currentIndex 和點擊的index 值 相等 // 從而實現 控制類名 this.currentIndex = index; } } }) </script>