1、active-class是哪個(gè)組件的屬性?嵌套路由怎么定義女器?
答:vue-router模塊的router-link組件。
2春塌、怎么定義vue-router的動(dòng)態(tài)路由?怎么獲取傳過來的動(dòng)態(tài)參數(shù)?
答:在router目錄下的index.js文件中只壳,對(duì)path屬性加上/:id俏拱。? 使用router對(duì)象的params.id
3、vue-router有哪幾種導(dǎo)航鉤子吼句?
答:三種锅必,一種是全局導(dǎo)航鉤子:router.beforeEach(to,from,next),作用:跳轉(zhuǎn)前進(jìn)行判斷攔截惕艳。第二種:組件內(nèi)的鉤子搞隐;第三種:?jiǎn)为?dú)路由獨(dú)享組件
4、scss是什么远搪?安裝使用的步驟是劣纲?有哪幾大特性?
答:預(yù)處理css谁鳍,把css當(dāng)前函數(shù)編寫癞季,定義變量,嵌套。 先裝css-loader倘潜、node-loader绷柒、sass-loader等加載器模塊,在webpack-base.config.js配置文件中加多一個(gè)拓展:extenstion涮因,再加多一個(gè)模塊:module里面test废睦、loader
4.1、scss是什么养泡?在vue.cli中的安裝使用步驟是嗜湃?有哪幾大特性?
答:css的預(yù)編譯瓤荔。
使用步驟:
第一步:用npm 下三個(gè)loader(sass-loader净蚤、css-loader、node-sass)
第二步:在build目錄找到webpack.base.config.js输硝,在那個(gè)extends屬性中加一個(gè)拓展.scss
第三步:還是在同一個(gè)文件今瀑,配置一個(gè)module屬性
第四步:然后在組件的style標(biāo)簽加上lang屬性 ,例如:lang=”scss”
有哪幾大特性:
1点把、可以用變量橘荠,例如($變量名稱=值);
2郎逃、可以用混合器哥童,例如()
3、可以嵌套
5褒翰、mint-ui是什么贮懈?怎么使用匀泊?說出至少三個(gè)組件使用方法?
答:基于vue的前端組件庫(kù)朵你。npm安裝各聘,然后import樣式和js,vue.use(mintUi)全局引入抡医。在單個(gè)組件局部引入:import {Toast} from ‘mint-ui’躲因。組件一:Toast(‘登錄成功’);組件二:mint-header忌傻;組件三:mint-swiper
6大脉、v-model是什么?怎么使用水孩? vue中標(biāo)簽怎么綁定事件镰矿?
答:可以實(shí)現(xiàn)雙向綁定,指令(v-class荷愕、v-for衡怀、v-if、v-show安疗、v-on)抛杨。vue的model層的data屬性。綁定事件:
7荐类、axios是什么怖现?怎么使用?描述使用它實(shí)現(xiàn)登錄功能的流程玉罐?
答:請(qǐng)求后臺(tái)資源的模塊屈嗤。npm install axios -S裝好,然后發(fā)送的是跨域吊输,需在配置文件中config/index.js進(jìn)行設(shè)置饶号。后臺(tái)如果是Tp5則定義一個(gè)資源路由。js中使用import進(jìn)來季蚂,然后.get或.post茫船。返回在.then函數(shù)中如果成功,失敗則是在.catch函數(shù)中
8扭屁、axios+tp5進(jìn)階中算谈,調(diào)用axios.post(‘a(chǎn)pi/user’)是進(jìn)行的什么操作?axios.put(‘a(chǎn)pi/user/8′)呢料滥?
答:跨域然眼,添加用戶操作,更新操作葵腹。
9高每、什么是RESTful API屿岂?怎么使用?
答:是一個(gè)api的標(biāo)準(zhǔn),無狀態(tài)請(qǐng)求鲸匿。請(qǐng)求的路由地址是固定的雁社,如果是tp5則先路由配置中把資源路由配置好。標(biāo)準(zhǔn)有:.post .put .delete
10晒骇、vuex是什么?怎么使用磺浙?哪種功能場(chǎng)景使用它洪囤?
答:vue框架中狀態(tài)管理。在main.js引入store撕氧,注入瘤缩。新建了一個(gè)目錄store,….. export 伦泥。場(chǎng)景有:?jiǎn)雾?yè)應(yīng)用中剥啤,組件之間的狀態(tài)。音樂播放不脯、登錄狀態(tài)府怯、加入購(gòu)物車
11、mvvm框架是什么防楷?它和其它框架(jquery)的區(qū)別是什么牺丙?哪些場(chǎng)景適合?
答:一個(gè)model+view+viewModel框架复局,數(shù)據(jù)模型model冲簿,viewModel連接兩個(gè)
區(qū)別:vue數(shù)據(jù)驅(qū)動(dòng),通過數(shù)據(jù)來顯示視圖層而不是節(jié)點(diǎn)操作亿昏。
場(chǎng)景:數(shù)據(jù)操作比較多的場(chǎng)景峦剔,更加便捷
12、自定義指令(v-check角钩、v-focus)的方法有哪些吝沫?它有哪些鉤子函數(shù)?還有哪些鉤子函數(shù)參數(shù)彤断?
答:全局定義指令:在vue對(duì)象的directive方法里面有兩個(gè)參數(shù)野舶,一個(gè)是指令名稱,另外一個(gè)是函數(shù)宰衙。組件內(nèi)定義指令:directives
鉤子函數(shù):bind(綁定事件觸發(fā))平道、inserted(節(jié)點(diǎn)插入的時(shí)候觸發(fā))、update(組件內(nèi)相關(guān)更新)
鉤子函數(shù)參數(shù):el供炼、binding
13一屋、說出至少4種vue當(dāng)中的指令和它的用法窘疮?
答:v-if:判斷是否隱藏;v-for:數(shù)據(jù)循環(huán)出來冀墨;v-bind:class:綁定一個(gè)屬性闸衫;v-model:實(shí)現(xiàn)雙向綁定
14、vue-router是什么诽嘉?它有哪些組件蔚出?
答:vue用來寫路由一個(gè)插件。router-link虫腋、router-view
15骄酗、導(dǎo)航鉤子有哪些?它們有哪些參數(shù)悦冀?
答:導(dǎo)航鉤子有:a/全局鉤子和組件內(nèi)獨(dú)享的鉤子趋翻。b/beforeRouteEnter、afterEnter盒蟆、beforeRouterUpdate踏烙、beforeRouteLeave
參數(shù):有to(去的那個(gè)路由)、from(離開的路由)历等、next(一定要用這個(gè)函數(shù)才能去到下一個(gè)路由讨惩,如果不用就攔截)最常用就這幾種
16、Vue的雙向數(shù)據(jù)綁定原理是什么寒屯?
答:vue.js 是采用數(shù)據(jù)劫持結(jié)合發(fā)布者-訂閱者模式的方式步脓,通過Object.defineProperty()來劫持各個(gè)屬性的setter,getter浩螺,在數(shù)據(jù)變動(dòng)時(shí)發(fā)布消息給訂閱者靴患,觸發(fā)相應(yīng)的監(jiān)聽回調(diào)。
具體步驟:
第一步:需要observe的數(shù)據(jù)對(duì)象進(jìn)行遞歸遍歷要出,包括子屬性對(duì)象的屬性鸳君,都加上setter和getter
這樣的話,給這個(gè)對(duì)象的某個(gè)值賦值患蹂,就會(huì)觸發(fā)setter或颊,那么就能監(jiān)聽到了數(shù)據(jù)變化
第二步:compile解析模板指令,將模板中的變量替換成數(shù)據(jù)传于,然后初始化渲染頁(yè)面視圖囱挑,并將每個(gè)指令對(duì)應(yīng)的節(jié)點(diǎn)綁定更新函數(shù),添加監(jiān)聽數(shù)據(jù)的訂閱者沼溜,一旦數(shù)據(jù)有變動(dòng)平挑,收到通知,更新視圖
第三步:Watcher訂閱者是Observer和Compile之間通信的橋梁,主要做的事情是:
1通熄、在自身實(shí)例化時(shí)往屬性訂閱器(dep)里面添加自己
2唆涝、自身必須有一個(gè)update()方法
3、待屬性變動(dòng)dep.notice()通知時(shí)唇辨,能調(diào)用自身的update()方法廊酣,并觸發(fā)Compile中綁定的回調(diào),則功成身退赏枚。
第四步:MVVM作為數(shù)據(jù)綁定的入口亡驰,整合Observer、Compile和Watcher三者饿幅,通過Observer來監(jiān)聽自己的model數(shù)據(jù)變化隐解,通過Compile來解析編譯模板指令,最終利用Watcher搭起Observer和Compile之間的通信橋梁诫睬,達(dá)到數(shù)據(jù)變化 -> 視圖更新;視圖交互變化(input) -> 數(shù)據(jù)model變更的雙向綁定效果帕涌。
ps:16題答案同樣適合”vue data是怎么實(shí)現(xiàn)的摄凡?”此面試題。
17蚓曼、請(qǐng)?jiān)敿?xì)說下你對(duì)vue生命周期的理解亲澡?
答:總共分為8個(gè)階段創(chuàng)建前/后,載入前/后纫版,更新前/后床绪,銷毀前/后。
創(chuàng)建前/后:在beforeCreated階段其弊,vue實(shí)例的掛載元素$el和數(shù)據(jù)對(duì)象data都為undefined癞己,還未初始化。在created階段梭伐,vue實(shí)例的數(shù)據(jù)對(duì)象data有了痹雅,$el還沒有。
載入前/后:在beforeMount階段糊识,vue實(shí)例的$el和data都初始化了绩社,但還是掛載之前為虛擬的dom節(jié)點(diǎn),data.message還未替換赂苗。在mounted階段愉耙,vue實(shí)例掛載完成,data.message成功渲染拌滋。
更新前/后:當(dāng)data變化時(shí)朴沿,會(huì)觸發(fā)beforeUpdate和updated方法。
銷毀前/后:在執(zhí)行destroy方法后败砂,對(duì)data的改變不會(huì)再觸發(fā)周期函數(shù)悯仙,說明此時(shí)vue實(shí)例已經(jīng)解除了事件監(jiān)聽以及和dom的綁定龄毡,但是dom結(jié)構(gòu)依然存在
18、請(qǐng)說下封裝?vue?組件的過程锡垄?
答:首先沦零,組件可以提升整個(gè)項(xiàng)目的開發(fā)效率。能夠把頁(yè)面抽象成多個(gè)相對(duì)獨(dú)立的模塊货岭,解決了我們傳統(tǒng)項(xiàng)目開發(fā):效率低路操、難維護(hù)、復(fù)用性等問題千贯。
然后屯仗,使用Vue.extend方法創(chuàng)建一個(gè)組件,然后使用Vue.component方法注冊(cè)組件搔谴。子組件需要數(shù)據(jù)魁袜,可以在props中接受定義。而子組件修改好數(shù)據(jù)后敦第,想把數(shù)據(jù)傳遞給父組件峰弹。可以采用emit方法芜果。
19鞠呈、你是怎么認(rèn)識(shí)vuex的?
答:vuex可以理解為一種開發(fā)模式或框架右钾。比如PHP有thinkphp蚁吝,java有spring等。
通過狀態(tài)(數(shù)據(jù)源)集中管理驅(qū)動(dòng)組件的變化(好比spring的IOC容器對(duì)bean進(jìn)行集中管理)舀射。
應(yīng)用級(jí)的狀態(tài)集中放在store中窘茁; 改變狀態(tài)的方式是提交mutations,這是個(gè)同步的事物脆烟; 異步邏輯應(yīng)該封裝在action中庙曙。
20、vue-loader是什么浩淘?使用它的用途有哪些捌朴?
答:解析.vue文件的一個(gè)加載器,跟template/js/style轉(zhuǎn)換成js模塊张抄。
用途:js可以寫es6砂蔽、style樣式可以scss或less、template可以加jade等
21署惯、請(qǐng)說出vue.cli項(xiàng)目中src目錄每個(gè)文件夾和文件的用法左驾?
答:assets文件夾是放靜態(tài)資源;components是放組件;router是定義路由相關(guān)的配置;view視圖诡右;app.vue是一個(gè)應(yīng)用主組件安岂;main.js是入口文件
22、vue.cli中怎樣使用自定義的組件帆吻?有遇到過哪些問題嗎域那?
答:第一步:在components目錄新建你的組件文件(smithButton.vue),script一定要export default {
第二步:在需要用的頁(yè)面(組件)中導(dǎo)入:import smithButton from ‘../components/smithButton.vue’
第三步:注入到vue的子組件的components屬性上面,components:{smithButton}
第四步:在template視圖view中使用猜煮,?
問題有:smithButton命名次员,使用的時(shí)候則smith-button。
23王带、聊聊你對(duì)Vue.js的template編譯的理解淑蔚?
答:簡(jiǎn)而言之,就是先轉(zhuǎn)化成AST樹愕撰,再得到的render函數(shù)返回VNode(Vue的虛擬DOM節(jié)點(diǎn))
詳情步驟:
首先刹衫,通過compile編譯器把template編譯成AST語(yǔ)法樹(abstract syntax tree 即 源代碼的抽象語(yǔ)法結(jié)構(gòu)的樹狀表現(xiàn)形式),compile是createCompiler的返回值搞挣,createCompiler是用以創(chuàng)建編譯器的带迟。另外compile還負(fù)責(zé)合并option。
然后柿究,AST會(huì)經(jīng)過generate(將AST語(yǔ)法樹轉(zhuǎn)化成render funtion字符串的過程)得到render函數(shù),render的返回值是VNode黄选,VNode是Vue的虛擬DOM節(jié)點(diǎn)蝇摸,里面有(標(biāo)簽名、子節(jié)點(diǎn)办陷、文本等等)