vue的ms題目

1、什么是 mvvm?

MVVM 是 Model-View-ViewModel 的縮寫。mvvm 是一種設計思想。Model 層代表數(shù)據(jù)模型,也可以在 Model 中定義數(shù)據(jù)修改和操作的業(yè)務邏輯;View 代表 UI 組件,它負責將數(shù)據(jù)模型轉化成 UI 展現(xiàn)出來,ViewModel 是一個同步 View 和 Model 的對象。

在 MVVM 架構下,View 和 Model 之間并沒有直接的聯(lián)系,而是通過 ViewModel 進行交互,Model 和 ViewModel 之間的交互是雙向的, 因此 View 數(shù)據(jù)的變化會同步到 Model 中,而 Model 數(shù)據(jù)的變化也會立即反應到 View 上。

ViewModel 通過雙向數(shù)據(jù)綁定把 View 層和 Model 層連接了起來,而 View 和 Model 之間的同步工作完全是自動的,無需人為干涉,因此開發(fā)者只需關注業(yè)務邏輯,不需要手動操作 DOM, 不需要關注數(shù)據(jù)狀態(tài)的同步問題,復雜的數(shù)據(jù)狀態(tài)維護完全由 MVVM 來統(tǒng)一管理。

2、mvvm 和 mvc 區(qū)別?

mvc 和 mvvm 其實區(qū)別并不大。都是一種設計思想。主要就是 mvc 中 Controller 演變成 mvvm 中的 viewModel。mvvm 主要解決了 mvc 中大量的 DOM 操作使頁面渲染性能降低,加載速度變慢,影響用戶體驗。和當 Model 頻繁發(fā)生變化,開發(fā)者需要主動更新到 View 。

3、vue生命周期的理解?

答:總共分為 8 個階段創(chuàng)建前/后,載入前/后,更新前/后,銷毀前/后。

創(chuàng)建前/后: 在 beforeCreate 階段,vue 實例的掛載元素 el 還沒有。

載入前/后:在 beforeMount 階段,vue 實例的$el 和 data 都初始化了,但還是掛載之前為虛擬的 dom 節(jié)點,data.message 還未替換。在 mounted 階段,vue 實例掛載完成,data.message 成功渲染。

更新前/后:當 data 變化時,會觸發(fā) beforeUpdate 和 updated 方法。

銷毀前/后:在執(zhí)行 destroy 方法后,對 data 的改變不會再觸發(fā)周期函數(shù),說明此時 vue 實例已經(jīng)解除了事件監(jiān)聽以及和 dom 的綁定,但是 dom 結構依然存在

4、懶加載(按需加載路由)

webpack 中提供了 require.ensure()來實現(xiàn)按需加載。以前引入路由是通過 import 這樣的方式引入,改為 const 定義的方式進行引入。

不進行頁面按需加載引入方式:

import home from '../../common/home.vue'
進行頁面按需加載的引入方式:

const home = r => require.ensure( [], () => r (require('../../common/home.vue')))

5、vue-router 有哪幾種導航鉤子?

三種
全局導航鉤子
router.beforeEach(to, from, next),
router.beforeResolve(to, from, next),
router.afterEach(to, from ,next)
組件內(nèi)鉤子
beforeRouteEnter,
beforeRouteUpdate,
beforeRouteLeave
單獨路由獨享組件
beforeEnter

6、vue 的雙向綁定的原理是什么

vue.js 是采用數(shù)據(jù)劫持結合發(fā)布者-訂閱者模式的方式,通過 Object.defineProperty()來劫持各個屬性的 setter,getter,在數(shù)據(jù)變動時發(fā)布消息給訂閱者,觸發(fā)相應的監(jiān)聽回調(diào)。
具體步驟:
第一步:需要 observe 的數(shù)據(jù)對象進行遞歸遍歷,包括子屬性對象的屬性,都加上 setter 和 getter 這樣的話,給這個對象的某個值賦值,就會觸發(fā) setter,那么就能監(jiān)聽到了數(shù)據(jù)變化
第二步:compile 解析模板指令,將模板中的變量替換成數(shù)據(jù),然后初始化渲染頁面視圖,并將每個指令對應的節(jié)點綁定更新函數(shù),添加監(jiān)聽數(shù)據(jù)的訂閱者,一旦數(shù)據(jù)有變動,收到通知,更新視圖
第三步:Watcher 訂閱者是 Observer 和 Compile 之間通信的橋梁,主要做的事情是:
在自身實例化時往屬性訂閱器(dep)里面添加自己
自身必須有一個 update()方法
待屬性變動 dep.notice()通知時,能調(diào)用自身的 update() 方法,并觸發(fā) Compile 中綁定的回調(diào),則功成身退。
第四步:MVVM 作為數(shù)據(jù)綁定的入口,整合 Observer、Compile 和 Watcher 三者,通過 Observer 來監(jiān)聽自己的 model 數(shù)據(jù)變化,通過 Compile 來解析編譯模板指令,最終利用 Watcher 搭起 Observer 和 Compile 之間的通信橋梁,達到數(shù)據(jù)變化 -> 視圖更新;視圖交互變化(input) -> 數(shù)據(jù) model 變更的雙向綁定效果。

7、vuex 有哪幾種屬性

有 5 種,分別是 state、getter、mutation、action、module

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容