當它們處於同一節點,v-for 的優先級比 v-if 更高。javascript
keep-alive:主要用於保留組件狀態或避免從新渲染。兩個重要屬性,include 緩存組件名稱,exclude 不須要緩存的組件名稱。css
v-if 和 v-show 均可以用來動態顯示DOM元素。html
v-on 能夠監聽多個方法,可是同一種事件類型的方法,v-on 只能監聽一個。vue
用於 管理可複用的元素。由於Vue 會盡量高效地渲染元素,一般會複用已有元素而不是從頭開始渲染。當 Vue.js 用 v-for 正在更新已渲染過的元素列表時,它默認用「就地複用」策略。若是數據項的順序被改變,Vue 將不會移動 DOM 元素來匹配數據項的順序, 而是簡單複用此處每一個元素,而且確保它在特定索引下顯示已被渲染過的每一個元素。key的做用主要是爲了高效的更新虛擬DOMjava
組件系統是Vue.js其中一個重要的概念,它提供了一種抽象,讓咱們可使用獨立可複用的小組件來構建大型應用,任意類型的應用界面均可以抽象爲一個組件樹node
組件 diyHeader.vuewebpack
<template> <div> <div id="header" @click="fun"></div> </div> </template> <script> export default { methods:{ fun(){ alert(1); } } } </script> <style> #header{ height: 100px; background: red; } </style>
util下components.jsios
import DiyHeader from "../components/diyHeader.vue" export default (Vue)=>{ Vue.component("DiyHeader", DiyHeader) }
main.jsweb
import components from "./util/components" Vue.use(components);
以後就能夠直接在項目中使用 DiyHeader 這個組件vue-router
在頁面裏導入組件而後放到components中就可使用了
import DiyHeader from "../components/diyHeader.vue" export default { name: "App", components: { DiyHeader }, }
directives.js
export default (Vue)=>{ Vue.directive("focus", { inserted: function (el) { el.focus(); } }) }
main.js
import directives from '@/utils/directives.js' Vue.use(directives
vue 的生命週期是: vue 實例從建立到銷燬,也就是從開始建立、初始化數據、編譯模板、掛載Dom→渲染、更新→渲染、卸載等一系列過程。
在實例初始化以後,數據觀測 (data observer) 和 event/watcher 事件配置以前被調用。
在實例建立完成後被當即調用。在這一步,實例已完成如下的配置:數據觀測 (data observer), 屬性和方法的運算,watch/event 事件回調。然而,掛載階段還沒開始,$el 屬性目前不可見。
在掛載開始以前被調用:相關的 render 函數首次被調用。
el 被新建立的 vm.$el 替換,並掛載到實例上去以後調用該鉤子。若是 root 實例掛載了一個文檔內元素,當 mounted 被調用時 vm.$el 也在文檔內。
數據更新時調用,發生在虛擬 DOM 打補丁以前。這裏適合在更新以前訪問現有的 DOM,好比手動移除已添加的事件監聽器。該鉤子在服務器端渲染期間不被調用,由於只有初次渲染會在服務端進行。
因爲數據更改致使的虛擬 DOM 從新渲染和打補丁,在這以後會調用該鉤子。
keep-alive 組件激活時調用。該鉤子在服務器端渲染期間不被調用。
keep-alive 組件停用時調用。該鉤子在服務器端渲染期間不被調用。
實例銷燬以前調用。在這一步,實例仍然徹底可用。該鉤子在服務器端渲染期間不被調用。
Vue 實例銷燬後調用。調用後,Vue 實例指示的全部東西都會解綁定,全部的事件監聽器會被移除,全部的子實例也會被銷燬。該鉤子在服務器端渲染期間不被調用。
當捕獲一個來自子孫組件的錯誤時被調用。此鉤子會收到三個參數:錯誤對象、發生錯誤的組件實例以及一個包含錯誤來源信息的字符串。此鉤子能夠返回 false 以阻止該錯誤繼續向上傳播。
就是隻有一張Web頁面的應用。單頁應用程序 (SPA) 是加載單個 HTML 頁面並在用戶與應用程序交互時動態更新該頁面的 Web 應用程序。瀏覽器一開始會加載必需的 HTML、CSS 和 JavaScript,全部的操做都在這張頁面上完成,都由 JavaScript 來控制。所以,對單頁應用來講模塊化的開發和設計顯得至關重要。
採用數據劫持結合發佈者-訂閱者模式的方式,經過Object.defineProperty()來劫持各個屬性的setter,getter,在數據變更時發佈消息給訂閱者,觸發相應監聽回調。當把一個普通 Javascript 對象傳給 Vue 實例來做爲它的 data 選項時,Vue 將遍歷它的屬性,用 Object.defineProperty 將它們轉爲 getter/setter。用戶看不到 getter/setter,可是在內部它們讓 Vue 追蹤依賴,在屬性被訪問和修改時通知變化。
vue-router 模塊 的router-link組件
Vuex 是一個專爲 Vue.js 應用程序開發的狀態管理器,採用集中式存儲管理應用的全部組件的狀態,主要是爲了多頁面、多組件之間的通訊。
Vuex有5個重要的屬性,分別是 State、Getter、Mutation、Action、Module,由 view 層發起一個 Action 給 Mutation,在 Mutation 中修改狀態,返回新的狀態,經過 Getter暴露給 view層的組件或者頁面,頁面監測到狀態改變因而更新頁面。若是你的項目很簡單,最好不要使用 Vuex,對於大型項目,Vuex 可以更好的幫助咱們管理組件外部的狀態,通常能夠運用在購物車、登陸狀態、播放等場景中。
$route是「路由信息對象」,包括path,params,hash,query,fullPath,matched,name等路由信息參數。而$router是「路由實例」對象包括了路由的跳轉方法,鉤子函數等
答:MVVM是是Model-View-ViewModel的縮寫,Model表明數據模型,定義數據操做的業務邏輯,View表明視圖層,負責將數據模型渲染到頁面上,ViewModel經過雙向綁定把View和Model進行同步交互,不須要手動操做DOM的一種設計思想。
答:在router目錄下的index.js文件中,對path屬性加上/:id。 使用router對象的params.id
經過用window.location.hash監聽頁面的hash值變化,切換對於的內容,hash變化不會重載頁面。
history採用HTML5的新特性;且提供了兩個新方法:pushState(),replaceState()能夠對瀏覽器歷史記錄棧進行修改,以及popState事件的監聽到狀態變動。
minix(混入) 是 Vue 中的高級用法,混入 (mixin) 提供了一種很是靈活的方式,來分發 Vue 組件中的可複用功能。好比咱們作一個下拉加載,不少組件都須要用到下拉加載,咱們就能夠把下拉加載封裝成一個minix,而後須要下拉加載功能的頁面都去導入這個minix,minix裏面的屬性或者方法就會被混合到當前組件自己的屬性上。簡單的說,minix B 有個 C方法(下拉加載),頁面 A 須要下拉加載因而就導入了 minix B,這時候頁面 A 也就擁有了 C 方法。若是頁面 A 自己有個 D方法,這時頁面 A 就會既有 C 方法也有自己的 D 方法。
Vue.use() 是Vue的一個全局註冊方法,主要用來註冊插件,默認第一個參數是它接受的參數類型必須是Function或者是Object,若是是個對象,必須提供install方法,install方法默認第一個參數爲 Vue,其後的參數爲註冊時傳入的arguments。若是是 Function 那麼這個函數就被當作 install 方法。同一個插件 Vue.use 會自動阻止屢次註冊。除了在註冊插件中使用 Vue.use 外,咱們還能夠在 directive註冊、filters註冊、components註冊等條件下使用。有的時候咱們會遇到某些時候引入插件是並無使用 Vue.use ,好比使用 axios 的時候,緣由是 axios 沒有 install 方法,因此也就不須要使用 Vue.use 來全局註冊。