壹句話:vue.js采用數據劫持結合發布訂閱模式,通過Object.defineProperty()劫持各種屬性的setter和getter,在數據發生變化時向訂閱者發布消息,並觸發響應的監控回調。
我的理解:在新Vue中,數據劫持是通過Observer中的Object.defineProperty()實現的,所有數據的getter和setter屬性都有表示。每次觸發設置器時,都會通過Dep通知觀察器。Watcher作為觀察者數據監聽器和編譯器模板解析器之間的橋梁,當觀察者聽到數據發生變化時,通過更新器通知編譯器更新視圖。Compile通過Watcher訂閱相應的數據,綁定更新函數,通過Dep添加訂閱者,實現雙向綁定。
Vue實例從創建到銷毀的整個過程就是生命周期。即創建、初始化數據、編譯模板、掛載DOM->;渲染和更新-& gt;渲染、卸載等壹系列過程。
它的生命周期中有多個事件鉤子,這使得我們在控制Vue實例的全過程時,更容易形成良好的邏輯。
它可以分為八個階段:創建前/後、加載前/後、更新前/後和銷毀前/後。
首次加載頁面時,將觸發BeforeCreate、created、beforeMounted、Mounted。
DOM呈現已在裝載中完成。
1,beforeCreate:可以在這裏添加壹個加載事件,該事件會在實例加載時觸發;
2.created:初始化完成時的事件寫在這裏。如果加載事件在這裏結束,異步請求也適合在這裏調用。
3.mounted:掛載元素並獲取DOM節點;
4.更新:如果數據統壹處理,這裏寫相應的函數;
5.beforeDestroy:可以放壹個確認框來確認停止事件;
6.nextTick:更新數據後立即操作DOM。
1,對象方法v-bind: class = "{'orange': isripe,' green ':is not rip } "
2.數組方法V-bind: class = "[class1,class2]"
3.內嵌V-bind: style = "{color: color,fontsize: fontsize+'px'} "
1,router-link標簽會被渲染成標簽,模板裏的跳轉都是這樣的;
2.另壹種是編輯導航,即通過router.push('/home ')等js跳轉。
M- model表示數據模型,也可以定義模型中數據修改和操作的業務邏輯。
V- view,意為視圖,負責將數據模型轉換成視圖並顯示出來。
VM- viewmodel是同步視圖和模型的對象,連接視圖和模型,用於監控數據模型的變化,控制視圖行為。
Computed:computed是壹個計算屬性,即計算值,更多用於計算值。它被緩存,計算出的值將在getter執行後被緩存。只有在它所依賴的屬性值發生變化後,下壹次才會再次調用對應的getter來計算計算出的值。
Watch:watch更多的是壹種觀察功能,類似於壹些數據的監控回調。它用於觀察props,$emit或這個組件的值,並在數據發生變化時為後續操作執行回調。它是不可緩存的,頁面的呈現時間不會改變,也不會被執行。
在style標簽中加入scoped屬性,表明其樣式作用於當前模塊,很好地實現了樣式私有化的目的,但必須謹慎使用,樣式不易改變。
解決方案:
①使用混合css樣式,混合全局樣式和私有樣式。
②深度選擇器:如果希望作用域樣式中的選擇器有更深的效果,可以使用>;& gt& gt接線員。比如:
有兩種方法可以將多個事件綁定到壹個元素:
1,修飾語的使用
2.在方法方法中寫兩個事件。
Vue組件中的數據值不能是對象,因為對象是引用類型,組件可能同時被多個實例引用。如果數據值是壹個對象,那麽多個實例* * *享受壹個對象,壹個組件改變數據屬性值,其他實例也會受到影響。
原理:JS執行是單線程的,而且是基於事件周期的。所有同步任務都在主線程上執行,形成壹個執行堆棧。除了主線程,還有壹個任務隊列。只要異步任務有運行結果,就會在任務隊列中放置壹個事件。壹旦執行棧中的所有同步任務都執行完畢,系統就會讀取任務隊列,查看相應的異步任務,然後結束等待狀態,進入執行棧,開始執行。主線程不斷重復上述步驟。主執行的執行過程是tick,所有異步結果都通過任務隊列進行調度。任務分為兩類:宏觀任務和微觀任務。宏任務包括:setTimeOut等。,而微任務包括promise.then。
Vue使用異步隊列控制DOM更新和nextTick回調相繼執行。在下壹個DOM更新周期之後,執行延遲回調。nexttick主要使用宏任務和微任務。nextTick把要執行的任務推到壹個隊列中,隊列中的所有任務在下壹個Tick同步執行,這是異步任務中的微任務。如果我們需要在更新響應數據後同步獲得呈現的DOM結果,我們可以使用nextTick方法異步獲得結果。
如何使用:
①這個。next tick . then(CB);異步的
父組件調用子組件的方法。
父組件:這個。$ refs . yelo sen . child method()
子組件將值傳遞給父組件,並調用方法:$emit。
組件之間:bus==$emit+$on
1.第壹種方法是通過這個直接觸發父組件的事件。在子組件中發出,父組件可以監聽這個事件。
3.第三種方法可以實現子組件調用父組件。
Keep-alive是Vue的壹個內置組件,可以保持包含的組件處於狀態或者避免重新渲染。
原始組件實例將被重用。這也意味著組件的生命周期鉤子將不再被調用,您可以簡單地監視watch $route對象:
是用來動態切換組件,DOM模板解析
Global: pre-guard,post-hook (beforeEach,afterEach)beforeResolve。
單壹路線專用:輸入前
組件級:beforeRouteEnter(無法獲取組件實例this)、beforeRouteUpdate、beforeRouteLeave。
這是因為在執行鉤子函數beforeRouteEnter時,組件還沒有被創建。先執行beforeRouteEnter,然後執行周期鉤子函數beforeCreate,這樣就可以通過next得到組件的實例對象,比如:next((VM)= & gt;{}),參數vm是組件的實例化對象。
缺點:
優勢:
計算屬性需要復雜的邏輯,可以用方法method代替。
vue-cli提供的腳手架模板包括browserify和webpack。
這是什麽?
Vue框架中的狀態管理包括狀態、獲取器、變異、動作和模塊。
②如何使用?
創建新的目錄存儲。
3功能場景?
在單頁應用程序中,組件之間的狀態。音樂播放、登錄狀態、添加到購物車等。
vuex的狀態:
A.狀態特征:Vuex是壹個倉庫,倉庫中有很多對象,其中狀態是數據源的存放地,對應壹般vue對象中的數據。存儲在狀態中的數據是響應性的。Vue組件從存儲中讀取數據。如果存儲中的數據發生變化,依賴於該數據的組件也將被更新。它通過mapState將全局狀態和getters映射到當前組件的計算屬性。
B.Getter特性:getter可以計算狀態,這是存儲的計算屬性。雖然屬性可以在壹個組件中計算,但是getters可以在多個組件中重用。如果壹個狀態只在壹個組件中使用,那麽可以省略getters。
C.突變特性:改變存儲中狀態的唯壹方法是提交壹個突變。每個變異都有壹個字符串類型的事件類型和壹個回調函數。我們需要在回調函數中改變狀態的值。如果我們要執行這個回調函數,那麽我們需要執行壹個對應的調用方法:store.commit。
D.動作特征:類似於突變,不同的是動作提交突變,而不是直接改變狀態。Action可以包含任何異步操作,Action函數接受與store實例具有相同方法和屬性的context對象,因此可以調用context.commit來提交變異。或者通過context.state和context.getters獲取狀態和getters動作由store.dispatch方法觸發:store.dispatch('increment ')。
E.模塊特性:模塊實際上只是解決了狀態復雜臃腫時,模塊可以將存儲分解成模塊,每個模塊都有自己的狀態、突變、動作和getter。
①創建組件頁面egtoast.vue。
②使用Vue.extend()擴展壹個組件構造器,然後實例化該組件構造器,就可以創建可復用的組件。
③在新創建的div上掛載toast組件;
④在正文中添加dom的toast組件;
⑤修改優化,動態控制頁面的顯示文本和顯示時間;
修飾符分為:通用修飾符、事件修飾符、鍵和系統。
①通用修飾符:
②事件修改器
③關鍵修飾詞
(4)系統修飾符(您可以使用下面的修飾符來實現壹個偵聽器,它只在相應的鍵被按下時觸發鼠標或鍵盤事件。)
Vue的核心功能是視圖模板引擎,但這並不意味著Vue不能是框架。在聲明式渲染(視圖模板引擎)的基礎上,通過添加組件系統、客戶端路由和大規模狀態管理,可以構建壹個完整的框架。更重要的是,這些功能是相互獨立的,妳可以在核心功能的基礎上隨意選擇其他組件,沒必要全部集成。可見“漸進”其實就是Vue的使用方式,也體現了Vue的設計理念。
在我看來,漸進代表的意思是:主張最少。每個框架視圖模板引擎必然會有自己的特點,對用戶會有壹定的要求。這些需求都是意見,或強或弱,其強弱會影響其在業務發展中的運用方式。
比如Angular,它的兩個版本都大力提倡。如果您使用它,您必須接受以下內容:
妳必須使用它的模塊化機制——妳必須使用它的依賴註入——妳必須使用它的特殊形式來定義組件(這在每個視圖框架中都是不可避免的),所以Angular具有很強的排他性。如果妳的應用不是從零開始,而是不斷考慮是否與其他東西整合,這些說法會帶來壹些麻煩。
Vue可能在某些方面不如React和Angular,但是循序漸進,沒有很強的主張。您可以使用它在原始大型系統的基礎上實現壹個或兩個組件,並將其用作jQuery。也可以和它的全家桶壹起開發,作為棱角使用;也可以用它的視圖來搭配自己設計的整個下層。它也可以是功能性的或兩者兼有。只是壹個輕量級的觀點。它只做該做的,不做不該做的,僅此而已。
漸進主義的含義,我理解是:主張最少,除了職責之外什麽都不做。