MVVM是Model-View-ViewModel的縮寫。MVVM是一種設計思想。Model 層表明數據模型,也能夠在Model中定義數據修改和操做的業務邏輯;View 表明UI 組件,它負責將數據模型轉化成UI 展示出來,ViewModel 是一個同步View 和 Model的對象。css
在MVVM架構下,View 和 Model 之間並無直接的聯繫,而是經過ViewModel進行交互,Model 和 ViewModel 之間的交互是雙向的, 所以View 數據的變化會同步到Model中,而Model 數據的變化也會當即反應到View 上。vue
ViewModel 經過雙向數據綁定把 View 層和 Model 層鏈接了起來,而View 和 Model 之間的同步工做徹底是自動的,無需人爲干涉,所以開發者只需關注業務邏輯,不須要手動操做DOM, 不須要關注數據狀態的同步問題,複雜的數據狀態維護徹底由 MVVM 來統一管理。java
mvc和mvvm其實區別並不大。都是一種設計思想。主要就是mvc中Controller演變成mvvm中的viewModel。mvvm主要解決了mvc中大量的DOM 操做使頁面渲染性能下降,加載速度變慢,影響用戶體驗。node
區別: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')))es6
vue框架中狀態管理。在main.js引入store,注入。新建一個目錄store,….. export 。場景有:單頁應用中,組件之間的狀態。音樂播放、登陸狀態、加入購物車web
有五種,分別是 State、 Getter、Mutation 、Action、 Module面試
將當前組件的<style>修改成<style scoped>vue-router
<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 樹的稱呼。