官方網(wǎng)站:http://vuejs.org/
創(chuàng)新互聯(lián)網(wǎng)站建設公司是一家服務多年做網(wǎng)站建設策劃設計制作的公司,為廣大用戶提供了做網(wǎng)站、成都網(wǎng)站設計,成都網(wǎng)站設計,廣告投放,成都做網(wǎng)站選創(chuàng)新互聯(lián),貼合企業(yè)需求,高性價比,滿足客戶不同層次的需求一站式服務歡迎致電。· 開發(fā)版本:包含完整的警告和調試模式
· 生產(chǎn)版本:刪除了警告,進行了壓縮
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <!DOCTYPE html> <htmllang="en"> <head> <metacharset="UTF-8"> <script type="text/javascript" src="../assets/js/vue.js"></script> <title>Helloworld</title> </head> <body> <h2>Hello World</h2> <hr> <divid="app"> {{message}} </div> <script type="text/javascript"> var app=new Vue({ el:'#app', data:{ message:'hello Vue!' } }) </script> </body> </html> |
v-if:是vue 的一個內部指令,指令用在html中。
v-if用來判斷是否加載html的DOM,比如我們模擬一個用戶登錄狀態(tài),在用戶登錄后現(xiàn)實用戶名稱。
關鍵代碼
1 | <divv-if="isLogin">hello 合東!</div> |
完整html代碼:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <!DOCTYPE html> <htmllang="en"> <head> <metacharset="UTF-8"> <script type="text/javascript" src="../assets/js/vue.js"></script> <title>v-if & v-show & v-else</title> </head> <body> <h2>v-if 判斷是否加載</h2> <hr> <divid="app"> <divv-if="isLogin">你好:JSPang</div> <divv-else>請登錄后操作</div> </div> <script type="text/javascript"> var app=new Vue({ el:'#app', data:{ isLogin:false } }) </script> </body> </html> |
這里在vue的data里定義了isLogin的值,當它為true時,網(wǎng)頁就會顯示:你好:合東,如果為false時,就顯示請登錄后操作。
調整css中display屬性,DOM已經(jīng)加載,只是CSS控制沒有顯示出來。
1 | <div v-show="isLogin">你好:合東</div> |
· v-if: 判斷是否加載,可以減輕服務器的壓力,在需要時加載。
· v-show:調整css dispaly屬性,可以使客戶端操作更加流暢。
模板寫法
1 2 3 | <liv-for="item in items"> {{item}} </li> |
js寫法
1 2 3 4 5 6 | var app=new Vue({ el:'#app', data:{ items:[20,23,18,65,32,19,54,56,41] } }) |
完整代碼:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <!DOCTYPE html> <htmllang="en"> <head> <metacharset="UTF-8"> <script type="text/javascript" src="../assets/js/vue.js"></script> <title>V-for 案例</title> </head> <body> <h2>v-for指令用法</h2> <hr> <divid="app"> <ul> <liv-for="item in items"> {{item}} </li> </ul> </div> <script type="text/javascript"> var app=new Vue({ el:'#app', data:{ items:[20,23,18,65,32,19,54,56,41] } }) </script> </body> </html> |
這是一個最基礎的循環(huán),先在js里定義了items數(shù)組,然后在模板中用v-for循環(huán)出來,需要注意的是,需要那個html標簽循環(huán),v-for就寫在那個上邊。
1 2 3 4 5 | computed:{ sortItems:function(){ return this.items.sort(); } } |
在computed里新聲明了一個對象sortItems,如果不重新聲明會污染原來的數(shù)據(jù)源,這是Vue不允許的,所以要重新聲明一個對象。
如果不重新聲明報錯:
如果一切順利的話,已經(jīng)看到了結果,但是這個小程序還是有個小Bug的,現(xiàn)在把數(shù)組修改成這樣。
1 | items:[20,23,18,65,32,19,5,56,41] |
把其中的54修改成了5,我們再看一下結果,發(fā)現(xiàn)排序結果并不是想要的
可以自己編寫一個方法sortNumber,然后傳給的sort函數(shù)解決這個Bug。
1 2 3 | function sortNumber(a,b){ return a-b } |
用法
1 2 3 4 5 | computed:{ sortItems:function(){ return this.items.sort(sortNumber); } } |
經(jīng)過一番折騰終于實現(xiàn)了真正的數(shù)字排序。
上邊循環(huán)的都是數(shù)組,那來看一個對象類型的循環(huán)是如何輸出的。
先定義個數(shù)組,數(shù)組里邊是對象數(shù)據(jù)
1 2 3 4 5 6 | students:[ {name:'合東',age:32}, {name:'Panda',age:30}, {name:'PanPaN',age:21}, {name:'King',age:45} ] |
在模板中輸出
1 2 3 4 5 | <ul> <liv-for="student in students"> {{student.name}} - {{student.age}} </li> </ul> |
加入索引序號:
1 2 3 4 5 | <ul> <li v-for="(student,index) in students"> {{index}}:{{student.name}} - {{student.age}} </li> </ul> |
排序,先加一個原生的對象形式的數(shù)組排序方法:
1 2 3 4 5 6 7 8 | //數(shù)組對象方法排序: function sortByKey(array,key){ return array.sort(function(a,b){ var x=a[key]; var y=b[key]; return ((x<y)?-1:((x>y)?1:0)); }); } |
有了數(shù)組的排序方法,在computed中進行調用排序
1 2 3 | sortStudent:function(){ return sortByKey(this.students,'age'); } |
注意:vue低版本中 data里面的items和computed里面可以一樣,但是高版本,是不允許相同名稱。
已經(jīng)會在html中輸出data中的值了,已經(jīng)用的是{{xxx}},這種情況是有弊端的,就是當網(wǎng)速很慢或者javascript出錯時,會暴露的{{xxx}}。Vue提供的v-text,就是解決這個問題的。代碼:
1 | <span>{{ message }}</span>=<spanv-text="message"></span><br/> |
如果在javascript中寫有html標簽,用v-text是輸出不出來的,這時候就需要用v-html標簽了。
1 | <spanv-html="msgHtml"></span> |
雙大括號會將數(shù)據(jù)解釋為純文本,而非HTML。為了輸出真正的HTML,需要使用v-html 指令。
需要注意的是:在生產(chǎn)環(huán)境中動態(tài)渲染HTML是非常危險的,因為容易導致XSS***。所以只能在可信的內容上使用v-html,永遠不要在用戶提交和可操作的網(wǎng)頁上使用。
完整代碼:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <!DOCTYPE html> <htmllang="en"> <head> <metacharset="UTF-8"> <script type="text/javascript" src="../assets/js/vue.js"></script> <title>v-text & v-html 案例</title> </head> <body> <h2>v-text & v-html 案例</h2> <hr> <divid="app"> <span>{{ message }}</span>=<spanv-text="message"></span><br/> <spanv-html="msgHtml"></span> </div> <script type="text/javascript"> var app=new Vue({ el:'#app', data:{ message:'hello Vue!', msgHtml:'<h3>hello Vue!</h3>' } }) </script> </body> </html> |
v-on 就是監(jiān)聽事件,可以用v-on指令監(jiān)聽DOM事件來觸發(fā)一些javascript代碼。
一、使用綁定事件監(jiān)聽器,編寫一個加分減分的程序。
效果如圖
程序代碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <!DOCTYPE html> <htmllang="en"> <head> <metacharset="UTF-8"> <script type="text/javascript" src="../assets/js/vue.js"></script> <title>v-on事件監(jiān)聽器</title> </head> <body> <h2>v-on 事件監(jiān)聽器</h2> <hr> <divid="app"> 本場比賽得分: {{count}}<br/> <buttonv-on:click="jiafen">加分</button> <buttonv-on:click="jianfen">減分</button> </div> <script type="text/javascript"> var app=new Vue({ el:'#app', data:{ count:1 }, methods:{ jiafen:function(){ this.count++; }, jianfen:function(){ this.count--; } } }) </script> </body> </html> |
v-on 還有一種簡單的寫法,就是用@代替。
1 | <button@click="jianfen">減分</button> |
除了綁定click之外,還可以綁定其它事件,比如鍵盤回車事件v-on:keyup.enter,增加一個輸入框,然后綁定回車事件,回車后把文本框里的值加到count上。
綁定事件寫法:
1 | <inputtype="text" v-on:keyup.enter="onEnter" v-model="secondCount"> |
javascript代碼:
1 2 3 | onEnter:function(){ this.count=this.count+parseInt(this.secondCount); } |
因為文本框的數(shù)字會默認轉變成字符串,所以需要用parseInt()函數(shù)進行整數(shù)轉換。也可以根據(jù)鍵值表來定義鍵盤事件:
v-model指令,理解為綁定數(shù)據(jù)源。就是把數(shù)據(jù)綁定在特定的表單元素上,可以很容易的實現(xiàn)雙向數(shù)據(jù)綁定。
html文件:
1 2 3 4 5 | <divid="app"> <p>原始文本信息:{{message}}</p> <h4>文本框</h4> <p>v-model:<inputtype="text" v-model="message"></p> </div> |
1 2 3 4 5 6 | var app=new Vue({ el:'#app', data:{ message:'hello Vue!' } }) |
· .lazy:取代 imput 監(jiān)聽 change 事件。
· .number:輸入字符串轉為數(shù)字。
· .trim:輸入去掉首尾空格。
1 | <textarea cols="30" rows="10" v-model="message"></textarea> |
1 2 3 | <h4>多選按鈕綁定一個值</h4> <inputtype="checkbox" id="isTrue" v-model="isTrue"> <labelfor='isTrue'>{{isTrue}}</label> |
1 2 3 4 5 6 7 8 9 10 | <h4>多選綁定一個數(shù)組</h4> <p> <input type="checkbox" id="JSPang" value="JSPang" v-model="web_Names"> <labelfor="JSP">JSPang</label><br/> <input type="checkbox" id="Panda" value="Panda" v-model="web_Names"> <labelfor="JSP">Panda</label><br/> <input type="checkbox" id="PanPan" value="PanPan" v-model="web_Names"> <labelfor="JSP">PanPan</label> <p>{{web_Names}}</p> </p> |
1 2 3 4 5 6 | <h4>單選按鈕綁定</h4> <input type="radio" id="one" value="男" v-model="sex"> <labelfor="one">男</label> <input type="radio" id="two" value="女" v-model="sex"> <labelfor="one">女</label> <p>{{sex}}</p> |
v-bind是處理HTML中的標簽屬性的,例如<div></div>就是一個標簽,<img>也是一個標簽,綁定<img>上的src進行動態(tài)賦值。
html文件:
1 2 3 | <divid="app"> <imgv-bind:src="imgSrc" width="200px"> </div> |
在html中我們用v-bind:src=”imgSrc”的動態(tài)綁定了src的值,這個值是在vue構造器里的data屬性中找到的。
js文件:
1 2 3 4 5 6 | var app=new Vue({ el:'#app', data:{ imgSrc:'http://baidu.com/wp-content/uploads/2017/02/vue01-2.jpg' } }) |
在data對象在中增加了imgSrc屬性來供html調用。
1 2 3 4 | <!-- 完整語法 --> <av-bind:href="url"></a> <!-- 縮寫 --> <a:href="url"></a> |
在工作中我們經(jīng)常使用v-bind來綁定css樣式:
在綁定CSS樣式是,綁定的值必須在vue中的data屬性中進行聲明。
1、直接綁定class樣式
1 | <div:class="className">1、綁定classA</div> |
2、綁定classA并進行判斷,在isOK為true時顯示樣式,在isOk為false時不顯示樣式。
1 | <div:class="{classA:isOk}">2、綁定class中的判斷</div> |
3、綁定class中的數(shù)組
1 | <div :class="[classA,classB]">3、綁定class中的數(shù)組</div> |
4、綁定class中使用三元表達式判斷
1 | <div :class="isOk?classA:classB">4、綁定class中的三元表達式判斷</div> |
5、綁定style
1 | <div :style="{color:red,fontSize:font}">5、綁定style</div> |
6、用對象綁定style樣式
1 | <div :style="styleObject">6、用對象綁定style樣式</div> |
1 2 3 4 5 6 7 8 9 | var app=new Vue({ el:'#app', data:{ styleObject:{ fontSize:'24px', color:'green' } } }) |
在模板中跳過vue的編譯,直接輸出原始值。就是在標簽中加入v-pre就不會輸出vue中的data值了。
1 | <divv-pre>{{message}}</div> |
這時并不會輸出message值,而是直接在網(wǎng)頁中顯示{{message}}
在vue渲染完指定的整個DOM后才進行顯示。它必須和CSS樣式一起使用,
1 2 3 | [v-cloak] { display: none; } |
1 2 3 | <divv-cloak> {{ message }} </div> |
在第一次DOM時進行渲染,渲染完成后視為靜態(tài)內容,跳出以后的渲染過程。
1 2 | <divv-once>第一次綁定的值:{{message}}</div> <div><inputtype="text" v-model="message"></div> |
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡助力業(yè)務部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統(tǒng)配攻擊溯源,準確進行流量調度,確保服務器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務器買多久送多久。
當前名稱:vue內部指令學習經(jīng)驗-創(chuàng)新互聯(lián)
文章分享:http://muchs.cn/article46/idheg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、品牌網(wǎng)站設計、網(wǎng)站設計、自適應網(wǎng)站、網(wǎng)站營銷、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)