vue是什么?
vue是構(gòu)建數(shù)據(jù)驅(qū)動的web界面的漸進式框架。Vue.js 的目標是通過盡可能簡單的 API 實現(xiàn)響應(yīng)的數(shù)據(jù)綁定和組合的視圖組件扇苞。
vue是一種mvc和mvvm模式的開發(fā)框架层亿,他的v-model可以實現(xiàn)數(shù)據(jù)的雙向綁定。
不用操作dom節(jié)點并可以用v-for進行數(shù)據(jù)渲染拔莱。
vue的優(yōu)點是什么?
a.低耦合碗降。視圖(View)可以獨立于Model變化和修改,一個ViewModel可以綁定到不同的"View"上塘秦,當View變化的時候Model可以不變讼渊,當Model變化的時候View也可以不變。
b.可重用性尊剔。你可以把一些視圖邏輯放在一個ViewModel里面爪幻,讓很多view重用這段視圖邏輯。
c.獨立開發(fā)。開發(fā)人員可以專注于業(yè)務(wù)邏輯和數(shù)據(jù)的開發(fā)(ViewModel)挨稿,設(shè)計人員可以專注于頁面設(shè)計仇轻。
d.可測試。界面素來是比較難于測試的叶组,而現(xiàn)在測試可以針對ViewModel來寫拯田。
vue當中的指令和它的用法?
v-if甩十、v-show:判斷是否隱藏船庇;v-for:數(shù)據(jù)循環(huán)出來;v-on:監(jiān)聽事件侣监、@change鸭轮、@click;v-bind:class:綁定一個屬性橄霉;v-model:實現(xiàn)雙向綁定窃爷。
v-if和v-show指令的共同點和不同點?
v-show指令是通過修改元素的displayCSS屬性讓其顯示或者隱藏。
v-if指令是直接銷毀和重建DOM達到讓元素顯示和隱藏的效果姓蜂。
v-model是什么按厘?怎么使用? vue中標簽怎么綁定事件钱慢?
可以實現(xiàn)雙向綁定逮京。
vue的model層的data屬性。綁定事件:<input @click=doLog() />
vue的雙向綁定束莫?
既可以把變量的數(shù)據(jù)綁定給節(jié)點懒棉,也可以把節(jié)點的值綁定給變量的數(shù)據(jù)。
vue路由怎么使用览绿?
1.下載安裝(用webpack新建vue項目時策严,默認選擇安裝vue-router),
2.創(chuàng)建路由文件饿敲,
3.在router文件夾里的index.js里配置路由妻导,
4.在main.js中引入router文件夾下的router.js文件
5.在app.vue里設(shè)置錨點 (router-link 和 router-view ,routerlink鏈接到的路由會展示在router-view里怀各,如果沒有router-view標簽且index.js設(shè)置路由的name屬性則頁面會直接跳轉(zhuǎn))
vue中<keep-alive>的作用栗竖?
把切換出去的組件保留在緩存中,可以保留組件的狀態(tài)或者避免重新渲染渠啤。
組件之間的傳值通信狐肢?
父組件向子組件傳值:
1.子組件在props中創(chuàng)建一個屬性,用來接收父組件傳過來的值沥曹;
2.在父組件中注冊子組件份名;
3.在子組件標簽中添加子組件props中創(chuàng)建的屬性碟联;
4.把需要傳給子組件的值賦給該屬性。子組件向父組件傳值:
1.子組件中需要以某種方式(如點擊事件)的方法來觸發(fā)一個自定義的事件僵腺;
2.將需要傳的值作為$emit的第二個參數(shù)鲤孵,該值將作為實參傳給響應(yīng)事件的方法;
3.在父組件中注冊子組件并在子組件標簽上綁定自定義事件的監(jiān)聽辰如。
vue的生命周期內(nèi)置
vue的生命周期內(nèi)置8個鉤子函數(shù)普监,創(chuàng)建前后,掛載前后琉兜,更新前后凯正,銷毀前后。
生命周期 | 詳細 |
---|---|
beforeCreate(創(chuàng)建前) | 組件實例更被創(chuàng)建豌蟋,組件屬性計算之前廊散,數(shù)據(jù)對象data都為undefined,未初始化梧疲。 |
created(創(chuàng)建后) | 組件實例創(chuàng)建完成允睹,屬性已經(jīng)綁定,數(shù)據(jù)對象data已存在幌氮,但dom未生成缭受,$el未存在。 |
beforeMount(載入前) | vue實例的$el和data都已初始化该互,掛載之前為虛擬的dom節(jié)點贯涎,data.message未替換。 |
mounted(載入后) | vue實例掛載完成慢洋,data.message成功渲染。 |
beforeUpdate(更新前) | 當data變化時陆盘,會觸發(fā)beforeUpdate方法普筹。 |
updated(更新后) | 當data變化時,會觸發(fā)updated方法隘马。 |
beforeDestroy(銷毀前) | 組件銷毀之前調(diào)用太防。 |
destroyed(銷毀后) | 組件銷毀之后調(diào)用,對data的改變不會再觸發(fā)周期函數(shù)酸员,vue實例已解除事件監(jiān)聽和dom綁定蜒车,但dom結(jié)構(gòu)依然存在。 |
axios是什么幔嗦?怎么使用酿愧?
axios 是一個基于 Promise 的,為瀏覽器和 Node.js 設(shè)計的 HTTP 客戶端邀泉。它盡可能簡化封裝了 HTTP 相關(guān)的各種操作嬉挡,在 Web App 中使用非常方便钝鸽。
Vue 2 官方建議在由 Vue 構(gòu)建的 SPA 中使用 axios 進行 HTTP 操作。
axios 用于請求后臺資源的模塊庞钢。npm install axios -S裝好拔恰,
然后發(fā)送的是跨域,需在配置文件中config/index.js進行設(shè)置基括。
后臺如果是Tp5則定義一個資源路由颜懊。js中使用import進來,
然后.get或.post风皿。返回在.then函數(shù)中如果成功河爹,
失敗則是在.catch函數(shù)中。
vuex
vuex是一個專門為vue.js設(shè)計的集中式狀態(tài)管理架構(gòu)揪阶。我把它理解為在data中的屬性需要共享給其他vue組件使用的部分昌抠,就叫做狀態(tài)。簡單的說就是data中需要共用的屬性鲁僚。如果沒有vuex 請求到的數(shù)據(jù)在頁面刷新后就必須再請求一次炊苫,但是有了vuex就可以把這些數(shù)據(jù)當做狀態(tài)保存到vuex中,在中大型項目中有很多共用的數(shù)據(jù)冰沙,就可以用vuex侨艾。
比如單頁應(yīng)用中,組件之間的狀態(tài)拓挥。音樂播放唠梨、登錄狀態(tài)、加入購物車就可以使用侥啤。
vuex有哪幾種屬性当叭?
有五種,分別是 state(訪問狀態(tài)對象)盖灸、getter(計算過濾操作)蚁鳖、mutation(修改狀態(tài))、action(異步修改狀態(tài))赁炎、 module(模塊組)
如何讓CSS只在當前組件中起作用?
將當前組件的<style>修改為<style scoped>
scss是什么醉箕?
預(yù)處理css,把css當前函數(shù)編寫徙垫,定義變量,嵌套讥裤。
vuejs與angularjs的區(qū)別?
相同點:
都支持指令:內(nèi)置指令和自定義指令姻报。
都支持過濾器:內(nèi)置過濾器和自定義過濾器己英。
都支持雙向數(shù)據(jù)綁定。
都不支持低端瀏覽器吴旋。不同點:
1.AngularJS的學習成本高剧辐,比如增加了Dependency Injection特性寒亥,而Vue.js本身提供的API都比較簡單、直觀荧关。
2.在性能上溉奕,AngularJS依賴對數(shù)據(jù)做臟檢查,所以Watcher越多越慢忍啤。
Vue.js使用基于依賴追蹤的觀察并且使用異步隊列更新加勤。所有的數(shù)據(jù)都是獨立觸發(fā)的。
對于龐大的應(yīng)用來說同波,這個優(yōu)化差異還是比較明顯的鳄梅。
vue不操作DOM節(jié)點查找元素
一般來講,獲取DOM元素未檩,需document.querySelector(".input1")獲取這個dom節(jié)點戴尸,然后在獲取input1的值。
但是用ref綁定之后冤狡,我們就不需要在獲取dom節(jié)點了孙蒙,直接在上面的input上綁定input1,然后$refs里面調(diào)用就行悲雳。
然后在javascript里面這樣調(diào)用:this.$refs.input1 這樣就可以減少獲取dom節(jié)點的消耗了挎峦。