https://juejin.im/post/5e5c65426fb9a07cbc269c39css
你們久等了!由於最近比較忙因此更新的比較慢
剛從學校出來實習面的是一年崗位的面試題,答的很差 歡迎指正!
主頁還有html/css,JavaScript,es6的面試題...持續更新
( 收集不易,看前先點贊養成好習慣~)
html
MVVM 是 Model-View-ViewModel 的縮寫。mvvm 是一種設計思想。Model 層表明數據模型,也能夠在 Model 中定義數據修改和操做的業務邏輯;View 表明 UI 組件,它負責將數據模型轉化成 UI 展示出來,ViewModel 是一個同步 View 和 Model 的對象。vue
在 MVVM 架構下,View 和 Model 之間並無直接的聯繫,而是經過 ViewModel 進行交互,Model 和 ViewModel 之間的交互是雙向的, 所以 View 數據的變化會同步到 Model 中,而 Model 數據的變化也會當即反應到 View 上。webpack
ViewModel 經過雙向數據綁定把 View 層和 Model 層鏈接了起來,而 View 和 Model 之間的同步工做徹底是自動的,無需人爲干涉,所以開發者只需關注業務邏輯,不須要手動操做 DOM, 不須要關注數據狀態的同步問題,複雜的數據狀態維護徹底由 MVVM 來統一管理。ios
mvc 和 mvvm 其實區別並不大。都是一種設計思想。主要就是 mvc 中 Controller 演變成 mvvm 中的 viewModel。mvvm 主要解決了 mvc 中大量的 DOM 操做使頁面渲染性能下降,加載速度變慢,影響用戶體驗。和當 Model 頻繁發生變化,開發者須要主動更新到 View 。es6
v-if:判斷是否隱藏;v-for:數據循環出來;v-bind:class:綁定一個屬性;v-model:實現雙向綁定web
解析.vue文件的一個加載器,跟template/js/style轉換成js模塊。 用途:js能夠寫es六、style樣式能夠scss或less、template能夠加jade等面試
//父組件經過標籤上面定義傳值 <template> <Main :obj="data"></Main> </template> <script> //引入子組件 import Main form "./main" exprot default{ name:"parent", data(){ return { data:"我要向子組件傳遞數據" } }, //初始化組件 components:{ Main } } </script> //子組件經過props方法接受數據 <template> <div>{{data}}</div> </template> <script> exprot default{ name:"son", //接受父組件傳值 props:["data"] } </script> 複製代碼
//子組件經過$emit方法傳遞參數 <template> <div v-on:click="events"></div> </template> <script> //引入子組件 import Main form "./main" exprot default{ methods:{ events:function(){ } } } </script> // <template> <div>{{data}}</div> </template> <script> exprot default{ name:"son", //接受父組件傳值 props:["data"] } </script> 複製代碼
在實際項目中咱們會碰到多層嵌套的組件組合而成,可是咱們如何實現嵌套路由呢?所以咱們須要在 VueRouter 的參數中使用 children 配置,這樣就能夠很好的實現路由嵌套。 index.html,只有一個路由出口ajax
<div id="app"> <!-- router-view 路由出口, 路由匹配到的組件將渲染在這裏 --> <router-view></router-view> </div> 複製代碼
main.js,路由的重定向,就會在頁面一加載的時候,就會將 home 組件顯示出來,由於重定向指向了 home 組件,redirect 的指向與 path 的必須一致。children 裏面是子路由,固然子路由裏面還能夠繼續嵌套子路由。vue-router
import Vue from 'vue' import VueRouter from 'vue-router' Vue.use(VueRouter) //引入兩個組件 import home from "./home.vue" import game from "./game.vue" //定義路由 const routes = [ { path: "/", redirect: "/home" },//重定向,指向了home組件 { path: "/home", component: home, children: [ { path: "/home/game", component: game } ] } ] //建立路由實例 const router = new VueRouter({routes}) new Vue({ el: '#app', data: { }, methods: { }, router }) //home.vue,點擊顯示就會將子路由顯示在出來,子路由的出口必須在父路由裏面,不然子路由沒法顯示。 複製代碼
import home from '../../common/home.vue' 複製代碼
const home = r => require.ensure( [], () => r (require('../../common/home.vue'))) 複製代碼
vue 框架中狀態管理。在 main.js 引入 store,注入。新建了一個目錄 store,….. export 。場景有:單頁應用中,組件之間的狀態。音樂播放、登陸狀態、加入購物車
// 新建 store.js import vue from 'vue' import vuex form 'vuex' vue.use(vuex) export default new vuex.store({ //...code }) //main.js import store from './store' ... 複製代碼
三種
router.beforeEach(to, from, next),
router.beforeResolve(to, from, next),
router.afterEach(to, from ,next)
複製代碼
beforeRouteEnter,
beforeRouteUpdate,
beforeRouteLeave
複製代碼
beforeEnter
複製代碼
全局定義指令:在 vue 對象的 directive 方法裏面有兩個參數, 一個是指令名稱, 另外一個是函數。 組件內定義指令:directives 鉤子函數: bind(綁定事件出發)、inserted(節點插入時候觸發)、update(組件內相關更新) 鉤子函數參數: el、binding 複製代碼
vue.js 是採用數據劫持結合發佈者-訂閱者模式的方式,經過 Object.defineProperty()來劫持各個屬性的 setter,getter,在數據變更時發佈消息給訂閱者,觸發相應的監聽回調。
具體步驟: 第一步:須要 observe 的數據對象進行遞歸遍歷,包括子屬性對象的屬性,都加上 setter 和 getter 這樣的話,給這個對象的某個值賦值,就會觸發 setter,那麼就能監聽到了數據變化
第二步:compile 解析模板指令,將模板中的變量替換成數據,而後初始化渲染頁面視圖,並將每一個指令對應的節點綁定更新函數,添加監聽數據的訂閱者,一旦數據有變更,收到通知,更新視圖
第三步:Watcher 訂閱者是 Observer 和 Compile 之間通訊的橋樑,主要作的事情是:
有 5 種,分別是 state、getter、mutation、action、module
vuex 僅僅是做爲 vue 的一個插件而存在,不像 Redux,MobX 等庫能夠應用於全部框架,vuex 只能使用在 vue 上,很大的程度是由於其高度依賴於 vue 的 computed 依賴檢測系統以及其插件系統,
vuex 總體思想誕生於 flux,可其的實現方式完徹底全的使用了 vue 自身的響應式設計,依賴監聽、依賴收集都屬於 vue 對對象 Property set get 方法的代理劫持。最後一句話結束 vuex 工做原理,vuex 中的 store 本質就是沒有 template 的隱藏着的 vue 組件;
Vuex 中修改 state 的惟一渠道就是執行 commit('xx', payload) 方法,其底層經過執行 this._withCommit(fn) 設置_committing 標誌變量爲 true,而後才能修改 state,修改完畢還須要還原_committing 變量。外部修改雖然可以直接修改 state,可是並無修改_committing 標誌位,因此只要 watch 一下 state,state change 時判斷是否_committing 值爲 true,便可判斷修改的合法性。
axios 是請求後臺資源的模塊。 npm i axios -S
若是發送的是跨域請求,需在配置文件中 config/index.js 進行配置
若是請求來的數據不是要被其餘組件公用,僅僅在請求的組件內使用,就不須要放入 vuex 的 state 裏
將當前組件的style修改成style scoped
收集不易若是以爲對您有用就動動手點個贊個關注支持一下吧 面試題持續更新 收藏總有用武之地,謝謝~