Vue.js是當下很火的一個JavaScript MVVM函式庫,它是以資料驅動和元件化的想法建構的。相較於Angular.js,Vue.js提供了更簡潔、更易於理解的API,使得我們能夠快速地上手並使用Vue.js。以下這篇文章主要給大家介紹了關於vue.js使用的相關總結,需要的朋友可以參考借鑒。
一、Vue.js元件
vue.js建構元件使用
Vue.component('componentName',{ /*component*/ });
這裡注意一點,元件要先註冊再使用,也就是說:
Vue.component('mine',{ template:'#mineTpl', props:['name','title','city','content'] }); var v=new Vue({ el:'#vueInstance', data:{ name:'zhang', title:'this is title', city:'Beijing', content:'these are some desc about Blog' } });
如果反過來會報錯,因為反過來代表先使用了組件的,但是組件卻沒註冊。
webpack報錯後,使用webpack --display-error-details可以排錯
二、指令keep-alive
在看demo的時候看到在vue-router寫著keep-alive,keep-alive-alive的意義:
如果把切換出去的元件保留在記憶體中,可以保留它的狀態或避免重新渲染。為此可以加入一個keep-alive指令
<component></component>
三、如何讓css只在當前元件中起作用
在每一個vue元件中都可以定義各自的css,js,如果希望元件內寫的css只對目前組件起作用,只需要在style中寫入scoped,即:
<style></style>
四、vuejs循環插入圖片
在寫循環的時候,寫入如下代碼:
<p> <img src="/static/imghwm/default1.png" data-src="{{item.image}}" class="lazy" alt="超全面的vue.js使用總結" > </p>
此時在控制台會出現警告
[Vue Warn]: src="{{item.image}}": interpolation in "src" attribute will cause a 404 request. Use v-bind:src instead.這裡意思是在「src」屬性插值將導致404請求。使用v-bind:src代替。
所以替換成如下:
<p> <img src="/static/imghwm/default1.png" data-src="item.image" class="lazy" alt="超全面的vue.js使用總結" > </p>
這裡需要主要,v-bind在寫的時候不能再用{{}},根據官方的說法:
<a></a>
這裡href 是參數,它告訴v-bind 指令將元素的href 特性跟表達式url 的值綁定。可能你已註意到可以用特性插值href="{{url}}" rel="external nofollow" 得到相同的結果:這樣沒錯,並且實際上在內部特性插值會轉為 v-bind 綁定。
五、綁定value到Vue實例的一個動態屬性上
對於單選按鈕,勾選框及選擇框選項,v-model綁定的value通常是靜態字串(對於勾選框是邏輯值):
<!-- `toggle` 为 true 或 false --> <input>
但是有時候想綁定value到vue實例的一個動態屬性上,這時可以用v-bind實現,而這個屬性的值可以不是字串。例如綁定Checkbox的value到vue實例的一個動態屬性:
<input> <p>{{toggle}}</p>
這裡綁定後,並不是說就可以點擊後由true,false的切換變成a,b的切換,因為這裡定義的動態a, b是scope上的a,b,並不能直接顯示出來,此時
//当选中时 vm.toggle === vm.a //当没选中时 vm.toggle === vm.b
所以此時需要在data中定義a,b,即:
new Vue({ el:'...', data:{ a:'a', b:'b' } });
六、片段實例
下面幾種情況會讓實例變成一個片段實例:
模板包含多個頂層元素。
範本只包含普通文字。
模板只包含其它組件(其它組件可能是一個片段實例)。
範本只包含一個元素指令,如
或 vue-router 的 。 模板根節點有一個流程控制指令,如 v-if 或 v-for。
這些情況讓實例有未知數量的頂級元素,它將把它的 DOM 內容當作片段。片段實例仍然會正確地渲染內容。不過,它沒有一個根節點,它的$el 指向一個錨點節點,即一個空的文字節點(在開發模式下是一個註解節點)。
但是更重要的是,組件元素上的非流程控制指令,非prop 特性和過渡將被忽略,因為沒有根元素供綁定:
<!-- 不可以,因为没有根元素 --> <example></example> <!-- props 可以 --> <example></example> <!-- 流程控制可以,但是不能有过渡 --> <example></example>
片段實例也有用處,但是通常情況下組件有一個根節點比較好,它會保證元件元素上的指令和特性能正確的轉換,同時效能也稍微好一點。
七、路由嵌套
路由嵌套會將其他元件渲染到該元件內,而不是進行整個頁面跳轉router-view本身就是將元件渲染到該位置,想要進行頁面跳轉,就要將頁面渲染到根元件,在起始設定路由時候寫到:
var App = Vue.extend({ root }); router.start(App,'#app');
這裡首先將根元件註冊進來,用於將路由中配置好的各個頁面渲染出來,然後將根元件掛載到與# app匹配的元素上。
八、實作多個根據不同條件顯示不同文字的方法
v-if,v-else可以實現條件選擇,但是如果是多個連續的條件選擇,則需要用到計算屬性computed。例如實現當輸入框中什麼都沒寫的時候顯示字串'empty',否則顯示輸入框中的內容,代碼如下:
<p> <input> </p><h1 id="changeVaule">{{changeVaule}}</h1> new Vue({ el:'#test', data:{ changeVaule:'123' }, computed :{ changeVaule:function(){ if(this.inputValue!==''){ return this.inputValue; }else{ return 'empty'; } } } });
九、Vuejs在變化檢測問題
1.檢測數組
由於javascript的限制,vuejs不能偵測到下面數組的變化:
直接索引設定元素,如vm.item[0]={};
修改資料的長度,如vm.item.length。
為了解決問題1,Vuejs擴充了觀察數組,為它增加一個$set()方法:
// 与 `example1.items[0] = ...` 相同,但是能触发视图更新 example1.items.$set(0, { childMsg: 'Changed!'})
问题2,需要一个空数组替换items。
除了$set() ,vuejs也为观察数组添加了$remove()方法,用于从目标数组中查找并删除元素,在内部调用了splice() 。
因此,不必:
var index = this.items.indexOf(item) if (index !== -1) { this.items.splice(index, 1) }
只需:
this.items.$remove(item);
2.检测对象
受ES5的显示,Vuejs不能检测到对象属性的添加或删除。因为Vuejs在初始化时候将属性转化为getter/setter,所以属性必须在data对象才能让Vuejs转换它,才能让它是响应的,例如:
var data = { a: 1 } var vm = new Vue({ data: data }) // `vm.a` 和 `data.a` 现在是响应的 vm.b = 2 // `vm.b` 不是响应的 data.b = 2 // `data.b` 不是响应的
不过,有办法在实例创建之后添加属性并且让它是响应的。对于Vue实例,可以使用$set(key,value)实例方法:
vm.$set('b', 2) // `vm.b` 和 `data.b` 现在是响应的
对于普通数据对象,可以使用全局方法Vue.set(object, key, value) :
Vue.set(data, 'c', 3) // `vm.c` 和 `data.c` 现在是响应的
有时你想向已有对象上添加一些属性,例如使用 Object.assign() 或 _.extend() 添加属性。但是,添加到对象上的新属性不会触发更新。这时可以创建一个新的对象,包含原对象的属性和新的属性:
// 不使用 `Object.assign(this.someObject, { a: 1, b: 2 })` this.someObject = Object.assign({}, this.someObject, { a: 1, b: 2 })
十、关于vuejs页面闪烁{{message}}
在vuejs指令中有v-cloak,这个指令保持在元素上直到关联实例结束编译。和CSS规则如[v-cloak]{display:none}一起用时,这个指令可以隐藏未编译的Mustache标签直到实例准备完毕。
用法如下:
[v-cloak]{ display:none; } <p>{{message}}</p>
这样
不会显示,直到编译结束
十一、关于在v-for循环时候v-model的使用
有时候需要循环生成input,用v-model绑定后,利用vuejs操作它,此时我们可以在v-model中写一个数组selected[$index] ,这样就可以给不同的input绑定不同的v-model,从而分别操作他们。这个我在demo中的dataBind.vue中用到。
十二、vuejs中过渡动画
在vuejs中,css定义动画:
.zoom-transition{ width:60%; height:auto; position: absolute; left:50%; top:50%; transform: translate(-50%,-50%); -webkit-transition: all .3s ease; transition: all .3s ease; } .zoom-enter, .zoom-leave{ width:150px; height:auto; position: absolute; left:20px; top:20px; transform: translate(0,0); }
其中动画在定的时候要注意上下对应,上面有什么,下面有什么,都要变化的,如果有不变化的,应该抽离出去,作为公共css样式,在上面的css中,如果我只写 transform: translate(-50%,-50%);而不写下面的transform: translate(0,0);则会导致上面的transform: translate(-50%,-50%);被添加到下面,认为这个是不变的。
十三、指令v-el的使用
有时候我们想就像使用jquery那样去访问一个元素,此时就可以使用v-el指令,去给这个元素注册一个索引,方便通过所属实例的$el访问这个元素。
注意
HTML不区分大小写,所以v-el:someEl将转换为全小写。可以用v-el:some-el然后设置this.$el.someEl。
示例
<span>hello</span> <span>world</span> this.$els.msg.textContent // -> "hello" this.$els.otherMsg.textContent // -> "world" this.$els.msg //-><span>hello</span>
十四、关于vuejs中使用事件名
在vuejs中,我们经常要绑定一些事件,有时候给DOM元素绑定,有时候给组件绑定。绑定事件在HTML中用v-on:click-"event" ,这时evet的名字不要出现大写,因为在1.x中不区分大小写,所以如果我们在HTML写v-on:click="myEvent"而在js中写myEvent就出错误,所以在vuejs的1.x绑定事件时候,要尽量避免使用大写字母。在2.0中没有该限制!
十五、v-if与v-show的区别
v-if直接不渲染这个DOM元素,而v-show是会渲染DOM元素,只是使用display:none隐藏,打开开发者工具可以看到该DOM
十六、关于transition全局钩子如何在组件中使用
Vue.transition是定义一个全局transition钩子的,如果想针对组件定义,则需要如下写法:
export default{ transition:{ 'fade':{ enter() {}, leave() {} } } }
这样fade这个过度钩子只会作用于组件内,如果同时有同名的全局钩子,则会优先使用组建定义的
十七、利用vue-router如何实现组件在渲染出来前执行某个事件
export default{ data(){ return{ selected:0, currentView:'view_0' } }, methods:{ choose(index) { this.selected=index; this.currentView='view_'+index; } }, route:{ data() { /*每次切换路由,在渲染出页面前都会执行*/ } } }
更多超全面的vue.js使用总结相关文章请关注PHP中文网!
相关文章:

JavaScript字符串替換方法詳解及常見問題解答 本文將探討兩種在JavaScript中替換字符串字符的方法:在JavaScript代碼內部替換和在網頁HTML內部替換。 在JavaScript代碼內部替換字符串 最直接的方法是使用replace()方法: str = str.replace("find","replace"); 該方法僅替換第一個匹配項。要替換所有匹配項,需使用正則表達式並添加全局標誌g: str = str.replace(/fi

因此,在這裡,您準備好了解所有稱為Ajax的東西。但是,到底是什麼? AJAX一詞是指用於創建動態,交互式Web內容的一系列寬鬆的技術。 Ajax一詞,最初由Jesse J創造

10款趣味橫生的jQuery遊戲插件,讓您的網站更具吸引力,提升用戶粘性!雖然Flash仍然是開發休閒網頁遊戲的最佳軟件,但jQuery也能創造出令人驚喜的效果,雖然無法與純動作Flash遊戲媲美,但在某些情況下,您也能在瀏覽器中獲得意想不到的樂趣。 jQuery井字棋遊戲 遊戲編程的“Hello world”,現在有了jQuery版本。 源碼 jQuery瘋狂填詞遊戲 這是一個填空遊戲,由於不知道單詞的上下文,可能會產生一些古怪的結果。 源碼 jQuery掃雷遊戲

本教程演示瞭如何使用jQuery創建迷人的視差背景效果。 我們將構建一個帶有分層圖像的標題橫幅,從而創造出令人驚嘆的視覺深度。 更新的插件可與JQuery 1.6.4及更高版本一起使用。 下載

本文討論了在瀏覽器中優化JavaScript性能的策略,重點是減少執行時間並最大程度地減少對頁面負載速度的影響。

Matter.js是一個用JavaScript編寫的2D剛體物理引擎。此庫可以幫助您輕鬆地在瀏覽器中模擬2D物理。它提供了許多功能,例如創建剛體並為其分配質量、面積或密度等物理屬性的能力。您還可以模擬不同類型的碰撞和力,例如重力摩擦力。 Matter.js支持所有主流瀏覽器。此外,它也適用於移動設備,因為它可以檢測觸摸並具有響應能力。所有這些功能都使其值得您投入時間學習如何使用該引擎,因為這樣您就可以輕鬆創建基於物理的2D遊戲或模擬。在本教程中,我將介紹此庫的基礎知識,包括其安裝和用法,並提供一

本文演示瞭如何使用jQuery和ajax自動每5秒自動刷新DIV的內容。 該示例從RSS提要中獲取並顯示了最新的博客文章以及最後的刷新時間戳。 加載圖像是選擇


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

Dreamweaver Mac版
視覺化網頁開發工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),