【前言】php
本節主要講解下VUe面試問題css
【主體】前端
MVVM是Model-View-ViewModel的縮寫。MVVM是一種設計思想。Model 層表明數據模型,也能夠在Model中定義數據修改和操做的業務邏輯;View 表明UI 組件,它負責將數據模型轉化成UI 展示出來,ViewModel 是一個同步View 和 Model的對象。vue
在MVVM架構下,View 和 Model 之間並無直接的聯繫,而是經過ViewModel進行交互,Model 和 ViewModel 之間的交互是雙向的, 所以View 數據的變化會同步到Model中,而Model 數據的變化也會當即反應到View 上。java
ViewModel 經過雙向數據綁定把 View 層和 Model 層鏈接了起來,而View 和 Model 之間的同步工做徹底是自動的,無需人爲干涉,所以開發者只需關注業務邏輯,不須要手動操做DOM, 不須要關注數據狀態的同步問題,複雜的數據狀態維護徹底由 MVVM 來統一管理。node
mvc和mvvm其實區別並不大。都是一種設計思想。主要就是mvc中Controller演變成mvvm中的viewModel。mvvm主要解決了mvc中大量的DOM 操做使頁面渲染性能下降,加載速度變慢,影響用戶體驗。react
區別:vue數據驅動,經過數據來顯示視圖層而不是節點操做。
場景:數據操做比較多的場景,更加便捷jquery
- 低耦合。視圖(View)能夠獨立於Model變化和修改,一個ViewModel能夠綁定到不一樣的"View"上,當View變化的時候Model能夠不變,當Model變化的時候View也能夠不變。
- 可重用性。你能夠把一些視圖邏輯放在一個ViewModel裏面,讓不少view重用這段視圖邏輯。
- 獨立開發。開發人員能夠專一於業務邏輯和數據的開發(ViewModel),設計人員能夠專一於頁面設計。
- 可測試。界面素來是比較難於測試的,而如今測試能夠針對ViewModel來寫。
- 父組件與子組件傳值
父組件經過標籤上面定義傳值
子組件經過props方法接受數據- 子組件向父組件傳遞數據
子組件經過$emit方法傳遞參數
聲明式(標籤跳轉) 編程式( js跳轉)webpack
- 第一步:在components目錄新建你的組件文件(indexPage.vue),script必定要export default {}
- 第二步:在須要用的頁面(組件)中導入:import indexPage from '@/components/indexPage.vue'
- 第三步:注入到vue的子組件的components屬性上面,components:{indexPage}
- 第四步:在template視圖view中使用,
例若有indexPage命名,使用的時候則index-page
webpack中提供了require.ensure()來實現按需加載。之前引入路由是經過import 這樣的方式引入,改成const定義的方式進行引入。
不進行頁面按需加載引入方式:import home from '../../common/home.vue'
進行頁面按需加載的引入方式:const home = r => require.ensure( [], () => r (require('../../common/home.vue')))ios
vue框架中狀態管理。在main.js引入store,注入。新建一個目錄store,….. export 。場景有:單頁應用中,組件之間的狀態。音樂播放、登陸狀態、加入購物車
有五種,分別是 State、 Getter、Mutation 、Action、 Module
將當前組件的<style>修改成<style scoped>
<keep-alive></keep-alive> 包裹動態組件時,會緩存不活動的組件實例,主要用於保留組件狀態或避免從新渲染。
1)採用ES6的import ... from ...語法或CommonJS的require()方法引入組件
2)對組件進行註冊,代碼以下
// 註冊 Vue.component('my-component', { template: '<div>A custom component!</div>' })
3)使用組件<my-component></my-component>
提供一個在頁面上已存在的 DOM 元素做爲 Vue 實例的掛載目標.能夠是 CSS 選擇器,也能夠是一個 HTMLElement 實例
vue-router模塊的router-link組件。
在router目錄下的index.js文件中,對path屬性加上/:id。
使用router對象的params.id。
三種,一種是全局導航鉤子:router.beforeEach(to,from,next),做用:跳轉前進行判斷攔截。
第二種:組件內的鉤子;
第三種:單獨路由獨享組件
總共分爲8個階段建立前/後,載入前/後,更新前/後,銷燬前/後。
- 建立前/後: 在beforeCreate階段,vue實例的掛載元素el和數據對象data都爲undefined,還未初始化。在created階段,vue實例的數據對象data有了,el尚未。
- 載入前/後:在beforeMount階段,vue實例的$el和data都初始化了,但仍是掛載以前爲虛擬的dom節點,data.message還未替換。在mounted階段,vue實例掛載完成,data.message成功渲染。
- 更新前/後:當data變化時,會觸發beforeUpdate和updated方法。
- 銷燬前/後:在執行destroy方法後,對data的改變不會再觸發周期函數,說明此時vue實例已經解除了事件監聽以及和dom的綁定,可是dom結構依然存在
答: Vue 實例從建立到銷燬的過程,就是生命週期。也就是從開始建立、初始化數據、編譯模板、掛載Dom→渲染、更新→渲染、卸載等一系列過程,咱們稱這是 Vue 的生命週期。
答:它的生命週期中有多個事件鉤子,讓咱們在控制整個Vue實例的過程時更容易造成好的邏輯。
答:能夠總共分爲8個階段:建立前/後, 載入前/後,更新前/後,銷燬前/銷燬後
答:第一次頁面加載時會觸發 beforeCreate, created, beforeMount, mounted 這幾個鉤子
答:DOM 渲染在 mounted 中就已經完成了。
答:生命週期鉤子的一些使用方法:
v-if:判斷是否隱藏;v-for:數據循環;v-bind:class:綁定一個屬性;v-model:實現雙向綁定
解析.vue文件的一個加載器。
用途:js能夠寫es六、style樣式能夠scss或less、template能夠加jade等
答:css的預編譯。
使用步驟:
第一步:先裝css-loader、node-loader、sass-loader等加載器模塊
第二步:在build目錄找到webpack.base.config.js,在那個extends屬性中加一個拓展.scss
第三步:在同一個文件,配置一個module屬性
第四步:而後在組件的style標籤加上lang屬性 ,例如:lang=」scss」
特性:
當有相同標籤名的元素切換時,須要經過 key 特性設置惟一的值來標記以讓 Vue 區分它們,不然 Vue 爲了效率只會替換相同標籤內部的內容。
當 Vue 處理指令時,v-for 比 v-if 具備更高的優先級,經過v-if 移動到容器元素,不會再重複遍歷列表中的每一個值。取而代之的是,咱們只檢查它一次,且不會在 v-if 爲否的時候運算 v-for。
Vue在 頁面上渲染的節點,及其子節點稱爲「虛擬節點 (Virtual Node)」,簡寫爲「VNode」。「虛擬 DOM」是由 Vue 組件樹創建起來的整個 VNode 樹的稱呼。
一:什麼是MVVM
MVVM是是Model-View-ViewModel的縮寫,Model表明數據模型,定義數據操做的業務邏輯,View表明視圖層,負責將數據模型渲染到頁面上,ViewModel經過雙向綁定把View和Model進行同步交互,不須要手動操做DOM的一種設計思想。
二:MVVM和MVC區別?和其餘框架(jquery)區別?那些場景適用?
MVVM和MVC都是一種設計思想,主要就是MVC中的Controller演變成ViewModel,,MVVM主要經過數據來顯示視圖層而不是操做節點,解決了MVC中大量的DOM操做使頁面渲染性能下降,加載速度慢,影響用戶體驗問題。主要用於數據操做比較多的場景。
三:Vue的優缺點是什麼
優勢:低耦合,可重用性,獨立開發,可測試,漸進式
缺點:不利於SEO,社區維護力度不強,相比還不夠成熟
三:組件之間傳值
父向子傳值:屬性傳值,父組件經過給子組件標籤上定義屬性,子組件經過props方法接收數據;
子向父傳值:事件傳值,子組件經過$emit(‘自定義事件名’,值),父組件經過子組件上的@自定義事件名=「函數」接收
非父子組件傳值:全局定義bus,var bus=new Vue() ; 發送者, bus.$emit(‘自定義名’,值) ;接受者,bus.$on(‘自定義名’,(值)=>{})
四:路由之間傳參
路由字典中:routes={path:’/detail/:id’,component:Detail}
標籤中:<router-link :to=」‘/detail/’+item.id 」>
Js中:this.$route.params.id
五:axios的特色和使用
特色:基於promise的Http庫,支持promise的全部API,用來請求和響應數據的,並且對響應回來的數據自動轉化爲json類型,安全性較高,客戶端支持防護XRSF(跨站請求僞造),默認不攜帶cookie;
使用:下載包後引入 import axios from ‘axios’ , 讓其攜帶cookie ,axios.defaults.withCredentials=true, 而後添加到prototype中,Vue.prototype.$axios=axios ,組建中不用引入直接使用this.$axios.get(url,{params:{id:1}})。
六:Vuex是什麼?怎麼使用?用於哪些場景?
Vuex是框架中狀態管理;新建目錄store...export,而後main.js引入store再注入到vue實例中;用於購物車,登陸狀態,單頁應用等。
七:Vuex有哪幾種屬性?
五種:state,action,mutation,getter,module
State:數據源存放地,數據是響應式的
Action: 邏輯處理,提交的是mutation,包含任意異步操做
Mutation: 修改state裏的公共數據
Getter: 至關於計算屬性,能夠複用,可緩存
Module: 模塊化
八:Vuex取值
This.$store.state.city
This.$store.commit(‘getData’)
this.$store.dispath(‘getData’)
This.$store.getters.getData
九:不使用vuex會帶來什麼問題?
可維護性降低,可讀性降低,增長耦合
十:v-show和v-if指令的共同點和不一樣點
V-show指令是經過修改元素的display的css樣式使其顯示隱藏
V-if指令是銷燬和重建DOM達到讓元素顯示隱藏
十一:如何讓css只在當前組件中起做用?
將當前組件的<style>修改成<style scoped>
十二:<keep-alive></keep-alive>的做用是什麼,如何使用?
包裹動態組件時,會緩存不活動的組件實例,主要用於保留組件狀態或避免從新渲染;
使用:簡單頁面時
緩存: <keep-alive include=」組件名」></keep-alive>
不緩存:<keep-alive exclude=」組件名」></keep-alive>
使用:複雜項目時
路由字典中定義{path:’/detail’,meta:{keepAlive:false/true}} 是否緩存
根目錄中:
<keep-alive><router-view v-if=」$route.meta.keepAlive」></router-view></keep-alive>
<keep-alive><router-view v-if=」 ! $route.meta.keepAlive」></router-view></keep-alive>
十三:Vue數據雙向綁定原理
Vue數據雙向綁定是經過數據劫持結合發佈者-訂閱者模式方式來實現的,語法主要有{{}}和v-model。首先用遞歸方法遍歷全部的屬性值,再用Object.defineProperty()給屬性綁定getter和setter方法添加一個observe(val)監聽器對數據進行劫持監聽;而後建立一個訂閱器來在getter裏收集訂閱者並建立和綁定watcher,若是數據變化,訂閱者就會執行本身對應的更新函數;watcher就是在自身實例化的時候往訂閱器裏添加本身,自身必須有一個update的數據,是監聽器和模板渲染的通訊橋樑;最後建立解析模板指令compile,替換數據,初始化視圖。最終observer來監聽本身的model數據變化經過compile解析編譯模板指令,利用watcher搭起observer和compile之間的通訊橋樑,達到數據變化->視圖更新雙向綁定效果。
十四:Vue生命週期
vue生命週期就是從開始建立,初始化數據,編譯模板,掛載DOM,渲染->更新->渲染,銷燬等一系列過程。生命週期鉤子以下:
組件實例週期:
BeforeCreate:實例初始化後,沒法訪問方法和數據;
Created:實例建立完成,可訪問數據和方法,注意,假若有某些數據必須獲取才容許進入頁面的話,並不適合;
beforeMonut:掛載DOM以前
Mounted :el被新建立的vm.$el替換,可獲取dom,改變data,注意,beforeRouterEnter的next的鉤子比mountend觸發靠後;
beforeUpdate:數據更新時調用,發生在虛擬DOM從新渲染前;
Updated:數據更改後,能夠執行依賴於DOM的操做,注意,應該避免在此期間更改狀態,可能會致使更新無限循環;
beforeDestroy:實例銷燬以前,這一步還能夠用this獲取實例,通常在這一步作重置操做,好比清定時器監聽dom事件;
Destroyed:實例銷燬後,會解除綁定,移除監聽。
十五:路由鉤子
全局路由鉤子:
Router.beforeEach((to,from,next)=>{... next()})
注意:必定要調用next(),不然頁面卡在那,通常用於對路由跳轉前進行攔截,參數:
To:即將要進入的目標路由對象 From:當前導航正要離開的路由
Next():跳轉下一個頁面 next(‘/path’):跳轉指定路由
Next(false):返回原來頁面 next((vm)=>{}):且在beforeRouterEnter用
好比根據登陸狀態跳轉頁面判斷(to.name->name是路由名)
Router.beforeEach(function(to,from,next){if(to.name==’login’){..}next();})
Router.afterEach((to,from)=>{}) 跳轉後調用沒有next方法
組件路有鉤子:
beforeRouteEnter(to,from,next){next(vm=>{...})} 路由跳轉時
注意:此鉤子在beforeCreate以前執行,可是next在組件mounted週期以後,沒法直接調用this訪問組件實例,可用next訪問vm實例,修改數據;
beforeRouteLeave(to,from,next){...next()} 離開路由時
注意:能夠直接訪問this,next不可回調
beforeRouteUpdate 路由切換時
十六:指令週期
Bind:一次初始化調用 inserted:被綁定元素插入父節點調用
Update:模板更新調用 unbind:指令與元素解綁時
Vue.nextTick:在dom更新後執行,通常用於dom操做
Vue.$nextTick:一直到真實的dom渲染結束後執行
Ex:created(){this.$nextTick(()=>{...})}
十七:生命週期的做用是什麼?
它的生命週期有多個事件鉤子,讓咱們在控制整個Vue實例的過程時更容易造成好的邏輯。
十八:第一次加載會觸發哪幾個鉤子?
會觸發beforeCreate , created ,beforeMount ,mounted
十九:說出至少4種vue當中的指令和用法?
V-if:判斷是否隱藏 v-for:數據循環 v-bind:綁定屬性
v-model:雙向綁定 v-is:動態組件特殊特性 v-on:事件綁定
二十:vue-loader是什麼?用途有哪些?
是解析vue文件的一個加載器,用途是js能夠寫es6,style樣式能夠scss或less,template能夠加jade
二十一:active-class是那個組件屬性?
Vue-router模塊的router-link組件,設置激活時樣式
二十二:vue中使用插件的步驟是什麼?
Inport ... from ... 引入插件,Vue.use(...)全局註冊
二十三:爲何使用key?
當有相同標籤名和元素切換時,須要經過key特性設置惟一的值來標記讓vue區分它們,不然vue爲了效率只會替換相同標籤內部的內容
二十三:爲何避免v-if和v-for用在一塊兒?
當vue處理指令時,v-for比v-if具備更高的優先級,經過v-if移動到容器的元素,不會在重複遍歷列表中的每一個值,取而代之的是,咱們只檢查它一次,且不會v-if爲否的時候運算v-for
二十四:VNode是什麼?虛擬DOM是什麼?
Vue在頁面上渲染的節點,及其子節點稱爲虛擬節點,簡稱VNode;虛擬DOM時由組件樹創建起來的整個VNode樹的稱呼
二十五:scss是什麼?有哪些特性?怎麼使用?
是css的預編譯,特新有能夠用變量($變量名=值),能夠用混合器(),能夠嵌套,能夠繼承,能夠運算,安裝先裝css-loader,node-loader,sass-loader,在webpack.base配置,style標籤上加lang=」scss」
二十五:Vue router如何實現跳轉
<router-link></router-link> router.push(‘/’) router.go(0)
二十六:vue router跳轉和location.href有什麼區別?
Router是hash改變;location.href是頁面跳轉,刷新頁面
二十七:v-model原理
<input v-model="sth">
==至關於經過oninput(用戶輸入時觸發)把表單值給到變量
<input v-bind:value="sth" v-on:input="sth=$event.target.value">
二十八:vue的template的理解
經過compile編譯template生成AST語法樹,AST語法樹通過generate轉化爲render function字符串後返回虛擬DOM節點(Vnode)的過程
二十九:vue和react區別
相同點:
都鼓勵組件化,都有’props’的概念,都有本身的構建工具,Reat與Vue只有框架的骨架,其餘的功能如路由、狀態管理等是框架分離的組件。
不一樣點:
React:數據流單向,語法—JSX,在React中你須要使用setState()方法去更新狀態
Vue:數據雙向綁定,語法--HTML,state對象並非必須的,數據由data屬性在Vue對象中進行管理。適用於小型應用,但對於對於大型應用而言不太適合。
三十:單頁面和多頁面的區別
單頁面:
整個項目中只有一個完整的HTML頁面,其它"頁面"只是一段HTML片段而已
優: 請求少
缺: 不利於搜索引擎優化
頁面跳轉本質:把當前DOM樹中某個DIV刪除,下載並掛載另外一個div片段
多頁面:
項目中有多個獨立的完整的HTML頁面
缺: 請求次數多,效率低
頁面跳轉本質:
刪除舊的DOM樹,從新下載新的DOM樹
三十一:Vue的SPA如何優化加載速度
減小入口文件體積,靜態資源本地緩存,開啓Gzip壓縮,使用SSR,nuxt.js
三十二:Axios發送post請求
Import qs from ‘qs’
Var data=qs.stringify({
Number : ’1’
})
Axios.post(url,data).then()
VUE如何自定義屬性
全局自定義:
Vue.directive(‘focus’,{
Inserted:function(el){
el.focus() //聚焦函數
}
})
三十三:組件自定義
directive{
inserted:function(el){
el.focus()
}
}
三十四:Vue和vuex 有什麼區別
Vue是框架,vuex是插件,vuex是專門爲vue應用程序開發的狀態管理模式
三十五:.Vuex中actions和mutations的區別
Mutations的更改是同步更改,用於用戶執行直接數據更改,this.$store.commit(‘名’)觸發
Actions的更改是異步操做,用於須要與後端交互的數據更改,this.$store.dispath(「名」)觸發
注意:
1):定義actions方法建立一個更改函數時,這個函數必須攜帶一個context參數,用於觸發mutations方法,context.commit(‘修改函數名’ , ’異步請求值’);
2):mutations第一個參數必須傳入state,第二個參數是新值
一、active-class是哪一個組件的屬性?嵌套路由怎麼定義?
答:vue-router模塊的router-link組件。
二、怎麼定義vue-router的動態路由?怎麼獲取傳過來的動態參數?
答:在router目錄下的index.js文件中,對path屬性加上/:id。 使用router對象的params.id
三、vue-router有哪幾種導航鉤子?
答:三種,一種是全局導航鉤子:router.beforeEach(to,from,next),做用:跳轉前進行判斷攔截。第二種:組件內的鉤子;第三種:單獨路由獨享組件
四、scss是什麼?安裝使用的步驟是?有哪幾大特性?
答:預處理css,把css當前函數編寫,定義變量,嵌套。 先裝css-loader、node-loader、sass-loader等加載器模塊,在webpack-base.config.js配置文件中加多一個拓展:extenstion,再加多一個模塊:module裏面test、loader
4.一、scss是什麼?在vue.cli中的安裝使用步驟是?有哪幾大特性?
答:css的預編譯。
使用步驟:
第一步:用npm 下三個loader(sass-loader、css-loader、node-sass)
第二步:在build目錄找到webpack.base.config.js,在那個extends屬性中加一個拓展.scss
第三步:仍是在同一個文件,配置一個module屬性
第四步:而後在組件的style標籤加上lang屬性 ,例如:lang=」scss」
有哪幾大特性:
一、能夠用變量,例如($變量名稱=值);
二、能夠用混合器,例如()
三、能夠嵌套
五、mint-ui是什麼?怎麼使用?說出至少三個組件使用方法?
答:基於vue的前端組件庫。npm安裝,而後import樣式和js,vue.use(mintUi)全局引入。在單個組件局部引入:import {Toast} from ‘mint-ui’。組件一:Toast(‘登陸成功’);組件二:mint-header;組件三:mint-swiper
六、v-model是什麼?怎麼使用? vue中標籤怎麼綁定事件?
答:能夠實現雙向綁定,指令(v-class、v-for、v-if、v-show、v-on)。vue的model層的data屬性。綁定事件:<input @click=doLog() />
七、axios是什麼?怎麼使用?描述使用它實現登陸功能的流程?
答:請求後臺資源的模塊。npm install axios -S裝好,而後發送的是跨域,需在配置文件中config/index.js進行設置。後臺若是是Tp5則定義一個資源路由。js中使用import進來,而後.get或.post。返回在.then函數中若是成功,失敗則是在.catch函數中
八、axios+tp5進階中,調用axios.post(‘api/user’)是進行的什麼操做?axios.put(‘api/user/8′)呢?
答:跨域,添加用戶操做,更新操做。
九、什麼是RESTful API?怎麼使用?
答:是一個api的標準,無狀態請求。請求的路由地址是固定的,若是是tp5則先路由配置中把資源路由配置好。標準有:.post .put .delete
十、vuex是什麼?怎麼使用?哪一種功能場景使用它?
答:vue框架中狀態管理。在main.js引入store,注入。新建了一個目錄store,….. export 。場景有:單頁應用中,組件之間的狀態。音樂播放、登陸狀態、加入購物車
十一、mvvm框架是什麼?它和其它框架(jquery)的區別是什麼?哪些場景適合?
答:一個model+view+viewModel框架,數據模型model,viewModel鏈接兩個
區別:vue數據驅動,經過數據來顯示視圖層而不是節點操做。
場景:數據操做比較多的場景,更加便捷
十二、自定義指令(v-check、v-focus)的方法有哪些?它有哪些鉤子函數?還有哪些鉤子函數參數?
答:全局定義指令:在vue對象的directive方法裏面有兩個參數,一個是指令名稱,另一個是函數。組件內定義指令:directives
鉤子函數:bind(綁定事件觸發)、inserted(節點插入的時候觸發)、update(組件內相關更新)
鉤子函數參數:el、binding
1三、說出至少4種vue當中的指令和它的用法?
答:v-if:判斷是否隱藏;v-for:數據循環出來;v-bind:class:綁定一個屬性;v-model:實現雙向綁定
1四、vue-router是什麼?它有哪些組件?
答:vue用來寫路由一個插件。router-link、router-view
1五、導航鉤子有哪些?它們有哪些參數?
答:導航鉤子有:a/全局鉤子和組件內獨享的鉤子。b/beforeRouteEnter、afterEnter、beforeRouterUpdate、beforeRouteLeave
參數:有to(去的那個路由)、from(離開的路由)、next(必定要用這個函數才能去到下一個路由,若是不用就攔截)最經常使用就這幾種
1六、Vue的雙向數據綁定原理是什麼?
答:vue.js 是採用數據劫持結合發佈者-訂閱者模式的方式,經過Object.defineProperty()
來劫持各個屬性的setter
,getter
,在數據變更時發佈消息給訂閱者,觸發相應的監聽回調。
具體步驟:
第一步:須要observe的數據對象進行遞歸遍歷,包括子屬性對象的屬性,都加上 setter
和getter
這樣的話,給這個對象的某個值賦值,就會觸發setter
,那麼就能監聽到了數據變化
第二步:compile解析模板指令,將模板中的變量替換成數據,而後初始化渲染頁面視圖,並將每一個指令對應的節點綁定更新函數,添加監聽數據的訂閱者,一旦數據有變更,收到通知,更新視圖
第三步:Watcher訂閱者是Observer和Compile之間通訊的橋樑,主要作的事情是:
一、在自身實例化時往屬性訂閱器(dep)裏面添加本身
二、自身必須有一個update()方法
三、待屬性變更dep.notice()通知時,能調用自身的update()方法,並觸發Compile中綁定的回調,則功成身退。
第四步:MVVM做爲數據綁定的入口,整合Observer、Compile和Watcher三者,經過Observer來監聽本身的model數據變化,經過Compile來解析編譯模板指令,最終利用Watcher搭起Observer和Compile之間的通訊橋樑,達到數據變化 -> 視圖更新;視圖交互變化(input) -> 數據model變動的雙向綁定效果。
ps:16題答案一樣適合」vue data是怎麼實現的?」此面試題。
1七、請詳細說下你對vue生命週期的理解?
答:總共分爲8個階段建立前/後,載入前/後,更新前/後,銷燬前/後。
建立前/後: 在beforeCreated階段,vue實例的掛載元素$el和數據對象data都爲undefined,還未初始化。在created階段,vue實例的數據對象data有了,$el尚未。
載入前/後:在beforeMount階段,vue實例的$el和data都初始化了,但仍是掛載以前爲虛擬的dom節點,data.message還未替換。在mounted階段,vue實例掛載完成,data.message成功渲染。
更新前/後:當data變化時,會觸發beforeUpdate和updated方法。
銷燬前/後:在執行destroy方法後,對data的改變不會再觸發周期函數,說明此時vue實例已經解除了事件監聽以及和dom的綁定,可是dom結構依然存在
1八、請說下封裝 vue 組件的過程?
答:首先,組件能夠提高整個項目的開發效率。可以把頁面抽象成多個相對獨立的模塊,解決了咱們傳統項目開發:效率低、難維護、複用性等問題。
而後,使用Vue.extend方法建立一個組件,而後使用Vue.component方法註冊組件。子組件須要數據,能夠在props中接受定義。而子組件修改好數據後,想把數據傳遞給父組件。能夠採用emit方法。
1九、你是怎麼認識vuex的?
答:vuex能夠理解爲一種開發模式或框架。好比PHP有thinkphp,java有spring等。
經過狀態(數據源)集中管理驅動組件的變化(比如spring的IOC容器對bean進行集中管理)。
應用級的狀態集中放在store中; 改變狀態的方式是提交mutations,這是個同步的事物; 異步邏輯應該封裝在action中。
20、vue-loader是什麼?使用它的用途有哪些?
答:解析.vue文件的一個加載器,跟template/js/style轉換成js模塊。
用途:js能夠寫es六、style樣式能夠scss或less、template能夠加jade等
2一、請說出vue.cli項目中src目錄每一個文件夾和文件的用法?
答:assets文件夾是放靜態資源;components是放組件;router是定義路由相關的配置;view視圖;app.vue是一個應用主組件;main.js是入口文件
2二、vue.cli中怎樣使用自定義的組件?有遇到過哪些問題嗎?
答:第一步:在components目錄新建你的組件文件(smithButton.vue),script必定要export default {
第二步:在須要用的頁面(組件)中導入:import smithButton from ‘../components/smithButton.vue’
第三步:注入到vue的子組件的components屬性上面,components:{smithButton}
第四步:在template視圖view中使用,<smith-button> </smith-button>
問題有:smithButton命名,使用的時候則smith-button。
2三、聊聊你對Vue.js的template編譯的理解?
答:簡而言之,就是先轉化成AST樹,再獲得的render函數返回VNode(Vue的虛擬DOM節點)
詳情步驟:
首先,經過compile編譯器把template編譯成AST語法樹(abstract syntax tree 即 源代碼的抽象語法結構的樹狀表現形式),compile是createCompiler的返回值,createCompiler是用以建立編譯器的。另外compile還負責合併option。
而後,AST會通過generate(將AST語法樹轉化成render funtion字符串的過程)獲得render函數,render的返回值是VNode,VNode是Vue的虛擬DOM節點,裏面有(標籤名、子節點、文本等等)
挑戰一下:
一、vue響應式原理?
二、vue-router實現原理?
三、爲何要選vue?與其它框架對比的優點和劣勢?
四、vue如何實現父子組件通訊,以及非父子組件通訊?
五、vuejs與angularjs以及react的區別?
六、vuex是用來作什麼的?
七、vue源碼結構
.