主頁 > 軟體設計 > Vue全部知識點整理

Vue全部知識點整理

2021-11-03 08:41:44 軟體設計

vue是什么

以資料驅動為視圖的漸進式MVVM框架,

  • 漸進式:循序漸進的使用vue,可選擇性強,可以只使用vue的小功能,不必完全使用vue,不強制的意思,
    – mvvm:m:資料模型, v-view 視圖:資料是雙向系結的,所有資料改變導致視圖改變,

vue底層原理和vue描述

原理:Object.definProperty
vue:優點:虛擬dom,模塊化開發,資料驅動,雙向回應,瀏覽器統一兼容,
缺點:由于是js生成的虛擬dom,不利于seo爬蟲爬取,首屏加載相對于靜態頁面慢,

data為什么是函式

因為組件的data會提升,而根實體上的data是物件,會導致一個合并,把data變成函式,以呼叫的方式來使,避免了覆寫和沖突

什么是虛擬dom

使用js演算法動態生成的dom叫虛擬dom

diff演算法和key的關系

同層對比,只要發現不一樣的節點就會用新的dom替換舊的dom,正是因為diff算出來的虛擬dom沒有跟蹤標識,當一個回圈出來的虛擬dom串列中
任意一個元素被修改,diff演算法沒辦法找到它,只能重新回圈渲染一份新的dom,加了key之后,每個dom有了自己唯一的標識,這樣修改的時候可以
精準的找到并修改,從而節省了性能,所以,key的值必須唯一,而且不可以用亂數,用時間,不建議用下標

生命周期

4個階段8個函式,其最大的問題是自動發起ajax請求問題,如果是在瀏覽器中運行,則應該在mounted發起,如果是服務端渲染,應該在created發起,

 //創建階段
    beforeCreate(){
        //骨架屏來占位
        //日志上傳
    },
    created(){
        //發起ajax請求,【不推薦】因為ajax異步,生命周期同步
        //在服務器端渲染的時候,這個函式是最后一個生命周期
        //技術胖
    },
    // 掛載階段
    beforeMount(){
        // 可以對一些資料進行格式化
    },
    mounted(){
        // 發起ajax【推薦】前端專案大多數都是運行在瀏覽器,極少數是服務器渲染
        
    },
    // 更新階段
    beforeUpdate(){
        // 可以二次對資料進行修改
    },
    updated(){
        // 只能觀察到更新的資料
    },
    // 銷毀階段
    beforeDestroy(){
        //清除常駐記憶體的垃圾
        //對用戶的離開行為進行提示
    },
    destroyed(){
        
    }

內置組件

solt 插槽

是自定義組件的高級形式,多用于模板復用,動態渲染傳入的內容或組件,
使用場景:插件的封裝,網站解構布局等,

  • 匿名插槽
    插槽組件中傳入的散內容被solt標簽接收
  • 具名插槽
    使用template標簽,用v-solt指令系結名字,插槽組件中slot組件使用用name屬性給插槽取名字
  • 插槽傳參
    slot組件傳遞引數,上游組件的template接收
  • v-slot:的縮寫是#

keep-alive 快取組件

語法:`<keep-alive excludes='MyDom'>
    <MYDom>
</keep-alive>`
凡是被它包裹的組件,都會被快取
- includes 只快取被指定的組件
- excludes 不快取指定的組件
keep-alive生命周期
- activated 快取的組件被激活了
- deactivated 快取的組件被停用了

component 動態加載組件

必須使用is屬性動態加載組件名稱,解放了大量書寫v-if或v-show問題,

transition 影片組件

使用name屬性控制影片類名的前綴,從而可以產生不同的影片效果,
一般用于嵌套在路由視圖組件或動態組件,

template 模板

第一種作為vue模板標簽使用,第二種作為插槽的模板,

nextTick

保證所有dom全部更新完畢之后才會觸發,用于獲取dom更新后的獲取dom1節點資料

指令

html
專門用于渲染字串dom片段,底層做了防止注入攻擊,會將js內容轉義

text
只能渲染文本內容

for
字串,數字,物件,陣列
遍歷陣列和物件的區別是物件有三個引數,分別是值,鍵,下標

model
資料雙向系結指令,專門用在表單元素上

on
縮寫是@,兩種用法,系結原生事件,自定義事件

bind
可以系結原生的屬性,
系結自定義屬性
系結給自定義組件上是傳參方式
動態系結屬性
v-bind:[name]='data'
動態系結屬性值
v-bind:checked='state'
系結class
v-bind:class='{active:true/false}'
系結style
v-bind:style='{color:color}'

once
讓元素內的值永遠保持第一次渲染,優化性能的一個手段,比如給固定寫死的靜態dom加上之后,這里的dom將不會在更新了,不參與diff重算,

pre
不會使用vue去決議里面的內容,而是當字串渲染了,

clock
防止閃爍,當一個值在頁面中使用的時候,如果該值是ajax的回傳值,那么值初始化的時候為空,則會導致頁面閃爍,

show
控制元素的顯示與隱藏,原理是css的display:none;

if
控制元素的加載與銷毀,如果頻繁切換應該使用v-show

slot
插槽的指令,縮寫是#

監聽和計算屬性

相同

都可以監聽資料的變化

不同

計算屬性監聽一個值,回傳一個新值,如果這個值不用的話,則監聽不會觸發,
watch專門監聽一個值的改變

計算屬性沒有資料型別的限制,watch如果監聽物件或者陣列,必須開啟深度監聽deep為true;

watch可以執行異步操作,computed是立即回傳,所以不能執行異步

計算屬性只要寫了受觀測的資料,就會立即對資料監聽,watch只能監聽一個資料,

計算屬性如果默認是只讀的,如果想修改則必須是物件寫法,在set函式中修改被監聽的資料,

修飾符

事件的

  • once 事件只執行一次
  • native 系結原生事件 當給予組件綁的時候
  • stop 組織冒泡
  • prevent 阻止默認事件

屬性的

v-bind.sync 偽雙向資料系結
v-bind.prop 把屬性轉成不可見的屬性

指令

v-model.lazy 當用戶失去焦點后觸發
v-model.number 嘗試轉成NaN
v-model.trim 去掉首尾空字串

鍵盤修飾符

13和enter 監聽回車

滑鼠

right和left

訂閱發布模式

訂閱者: 派發事物接收的物件,比如dom元素
發布者: 事物委托物件,比如proxy

骨架屏優化

當頁面基于資料渲染,資料尚未獲取到,使用骨架屏占位,

動態系結指令

v-bind;[name],name是變數,賦予任意值

組件通信

父傳子

父組件v-bind傳遞,子組件props接收

子傳父

父組件v-on函式,子組件使用$emit呼叫

父子雙向

  • v-model 自動注入value值和input函式
  • .sync 偽資料雙向系結

兄弟

  • 讓父組件充當中間人
  • $parent獲取到父組件實體
  • $children 獲取到所有的子組件

跨級

  • $root 獲取根實體物件
  • $on和$event使用同一個父級,子級用on發送,父用event監聽
  • 黑魔法vae1.0bus中央事件池子,new一個vue讓它作為中間人,基于on和event來處理,
  • 最終是vuex

vue專案優化

  • 按需加載-組件的懶加載,只有當用戶訪問該組件時,才去加載,
  • 打包的時候關閉原始碼映射,可以提高打包速度
  • 模塊化代碼復用,
  • 使用動態加載組件component
  • 頻繁切換的元素優先使用v-show
  • 使用回圈渲染的時候避免使用v-if
  • 給大量子元素系結事件的時候優先使用事件委托
  • 使用精靈圖優化加載小圖示
  • 使用骨架屏優化首屏加載慢的問題

自定義系統(指令/過濾器)插件

自定義指令directive

擴展vue沒有的指令功能,舉例:當頁面打開后讓input獲取焦點

  • 語法

directives:{
    focus:{
        inserted(el,binding,olnode){
            // el 是系結的元素物件
            // binding是outions,里面有value
            // oldnode舊的虛擬dom
        }
    }
}

自定義過濾器filters

在不修改原資料的情況下,對資料進行處理,回傳新的資料,

  • 語法:
// 宣告
filters:{
    add(value){
        return value+666
    }
}
// 使用
{{n | add}}

物件.install 方法

vue的插件是一個綜合性的功能封裝,

  • 語法:
// 宣告
exprot default {
    install(value,option){
        /// *** value.filters
    }
}
// 使用
Vue.use(plugin,{lg:trye})

mixin 混入

減少當前組件的代碼體積的,把一些無關緊要的代碼提取到外面,可以給其他組件進行復用,
混入是js代碼復用,
但是,它不用和全域使用,否則會出現沖突

  • 如果混入里的值或函式和組件的重復了,一定用組件里的,
  • 如果混入里生命周期和組件的重復了,先混入后組件,會合并掉

spa 單頁面應用

專案中只有一個html檔案,

v-model原理

object.defineProtperty

el和$mount 區別

el是配置,mount是方法
el比mount掛載的快,mount要等全部

Vue.set方法

因為object.defineProtperty方法的缺陷,導致動態添加或洗掉的屬性不能被監聽回應,所有才用這個方法,


路由的底層原理

history和loaction.hash

路由的傳參方式

  • query 用?類似于get請求方式傳參
  • params 動態路由的動態欄位
  • hash 非hash模式下使用#傳參,會被hash接收
  • meta 元資料,元資訊,路由配置的時候寫死的,
  • 屬性傳參,凡是被他渲染出來的路由組件都會接收props屬性

路由的攔截器

全域守衛:前置守衛 beforeEach 用來做全域的路由權限管理 后置守衛 afterEach 沒有next,最好用來上報日志
路由獨享:beforeEnter 確認進入前
組件守衛:beforeRouteUpdate 獲取動態組件的欄位 更新, 離開 beforeRouteLeave 用于確人用戶離開行為,表單頁面

router和route區別

router是new的vueRouer的實體物件,它擁有路由的全部功能,
route 僅表示當前路由的資訊

宣告式導航和編程式導航

宣告式指<router-link>
編程式指this.$router.push

跳轉方式

push 向歷史記錄中添加一條記錄
go 向歷史記錄中前進后退,值是數字
back 后退
forward 前進
replace 用當前地址替換歷史記錄中最后一條地址

路由配置方式

動態路由:使用/:name
嵌套路由: 使用children
別名:alias用陣列包裹可以設定多個
重定向:redirect
命名路由:name屬性

路由的組成部分

導航,視圖,配置

路由組件懶加載

一個函式回傳import函式加載組件
() => import('./component')

監聽滾動事件

scrollBehavior可以設定滾動條初始的位置,當路由跳轉的時候他會執行

vuex作業流程

1.store里的state在組件中使用
2.組件使用dispatch呼叫action派發業務
3.action使用commit呼叫mutation
4.mutation呼叫state進行修改
5.當state改變后,store通知組件更新

vuex的組成部分

  • state
  • getters
  • mutations
  • modules
  • actions
  • plugins
  • strict

嚴格與非嚴格模式的區別

嚴格模式

mutations只能運行同步代碼,且只能在這里修改state

非嚴格模式

state可以在任何地方修改,mutations也可以執行異步代碼

輔助函式

  • matState
  • mapGetters
  • mapMutations
  • mapActions
  • createNamespacedHelpers

mutation和action區別

mutation式唯一修改state,且只能運行同步代碼,action專門用于處理異步操作,只能通過呼叫mutation修改state

state和getter的關系

state相當于組件里的data,getters相當于組件里的computed
getters是基于state計算出來的

vuex的模塊化

modules用于大型專案開發,主要負責獨立模塊的獨享狀態管理
默認state和getter是歸屬于當前模塊的作用域的,但是mutation和action函式會自動提升到根store物件下面,所以需要命名空間,每個模塊使用namespaced屬性開啟

ui庫的使用

pc:element-ui 移動:vant

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/345801.html

標籤:其他

上一篇:硬核科普:到底啥是云原生?

下一篇:大話觀察者模式以及日常參考

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more