答 : vue是採用資料劫持,並且使用發布-訂閱者的開發模式。原理是觀察者observer通過object.defineproperty()
來劫持到各個屬性的getter
setter
,在資料變動的時候,會被observer觀察到,會通過dep通知資料的訂閱者watcher,之後進行相應的檢視上面的變化
具體實現步驟,感興趣的可以看看
第一步:需要observe的資料物件進行遞迴遍歷,包括子屬性物件的屬性,都加上 setter和getter
這樣的話,給這個物件的某個值賦值,就會觸發setter,那麼就能監聽到了資料變化
第二步:compile解析模板指令,將模板中的變數替換成資料,然後初始化渲染頁面檢視,並將每個指令對應的節點繫結更新函式,新增監聽資料的訂閱者,一旦資料有變動,收到通知,更新檢視
第三步:watcher訂閱者是observer和compile之間通訊的橋梁,主要做的事情是:
1、在自身例項化時往屬性訂閱器(dep)裡面新增自己
2、自身必須有乙個update()方法
3、待屬性變動dep.notice()通知時,能呼叫自身的update()方法,並觸發compile中繫結的**,則功成身退。
第四步:mvvm作為資料繫結的入口,整合observer、compile和watcher三者,通過observer來監聽自己的model資料變化,通過compile來解析編譯模板指令,最終利用watcher搭起observer和compile之間的通訊橋梁,達到資料變化 -> 檢視更新;檢視互動變化(input) -> 資料model變更的雙向繫結效果
答 : 建立前/後,dom渲染前/後,更新前/後,銷毀前/後;
對於各個週期的理解:
建立前/後:
beforecreated:此時的vue例項還沒有掛載元素$el
,資料物件data也是undefiend;
created:vue例項的資料物件data有了,但是$el
還沒有
載入前/後:
beforemount:vue的例項的$el和data都初始化了,但還是掛載在之前虛擬的dom節點上面,data.message還未替換
mounted :vue例項掛載完成,data.message成功渲染。
更新前/後
在data發生變化的時候,會觸發beforeupdate和updated方法。
銷毀前/後:
在destiory之後,對data的改變不會再觸發週期函式,說明此時vue例項已經解除了事件監聽以及和dom的繫結,但是dom結構依然存在
首先,元件可以提公升整個專案的開發效率。能夠把頁面抽象成多個相對獨立的模組,解決了我們傳統專案開發:效率低、難維護、復用性等問題。
然後,使用vue.extend方法建立乙個元件,然後使用vue.component方法註冊元件。子元件需要資料,可以在props中接受定義。而子元件修改好資料後,想把資料傳遞給父元件。可以採用emit方法。
vue-router模組的router-link元件。
當有多層元件巢狀的時候,可以考慮巢狀路由實現
因此我們需要在 vuerouter 的引數中使用 children 配置,這樣就可以很好的實現路由巢狀。
可能還會問如何實現重定向:
使用redirect配置
在router目錄下的index.js檔案中,對path屬性加上/:id。
使用router物件的params.id。
三種;
最常用的是乙個全域性導航鉤子,router.beforeeach(to,from,next)
,可以用作路由跳轉前進行判斷攔截
第二種:元件內的鉤子
第三種:單獨路由獨享元件
css的預編譯。
使用步驟:
第一步:用npm 下三個loader(sass-loader、css-loader、node-sass)
第二步:在build目錄找到webpack.base.config.js,在那個extends屬性中加乙個拓展.scss
第三步:還是在同乙個檔案,配置乙個module屬性
第四步:然後在元件的style標籤加上lang屬性 ,例如:lang=」scss」
可以實現雙向繫結,指令(v-class、v-for、v-if、v-show、v-on)。vue的model層的data屬性。繫結事件:
axios:是請求後台資源的模組;
因為vue-cli會建立乙個伺服器,那麼本地去用axios請求,會造成跨域;解決方法是通過vue-cli生成的框架的結構目錄下的config/index.js,去配置proxytable配置項;
詳情可參照:
state、mutations、actions、getters四個屬性值
面試中常被問到的問題
我對程式設計比較感興趣,擅長資料結構的演算法,了解併發程式設計 設計模式等基本知識。對資料庫也有一些研究。善於專研,勤於學習,能夠團結他人,不懼怕困難。我的工作經驗不足,可能要花一些時間來適應工作環境 我可以接受加班。同時,我會提高我的工作效率,減少不必要的加班 按照招聘的工資給就行 我打算往高階軟...
面試中經常被問到的問題
1 請簡單解釋演算法是什麼?演算法是乙個定義良好的計算過程,它將一些值作為輸入並產生相應的輸出值。簡單來說,它是將輸入轉換為輸出的一系列計算步驟。2 解釋什麼是快速排序演算法?快速排序演算法能夠快速排序列表或查詢。它基於分割交換排序的原則,這種型別的演算法占用空間較小,它將待排序列表分為三個主要部分...
WinCE面試經常被問到的問題
技術問題 1 wince 下如何訪問一段物理記憶體 希望能聽到 ce5.0 與 ce6.0 各自不同的結果。2 執行緒同步機制有哪些 至少說出三種以上 3 setthreadpriority 和 cesetthreadpriority 的區別 4 volatile 有什麼含意?舉例說明 5 從 he...