vue基本知識概述

2021-09-28 20:18:35 字數 4993 閱讀 2574

mvvm設計模式:

傳統網頁組成: 3部分:

html: 定義網頁的內容

css: 定義網頁的樣式

js: 為網頁新增互動行為

問題: js dom操作,既要加工資料,又要承擔大量的反覆的增刪改查操作。

重新劃分上述3部分:

view檢視: 指網頁中的元素和樣式,包括html和css

model模型資料: 指程式中建立的或從遠端獲取的資料(如ajax請求的資料,放在data中)

viewmodel檢視模型/控制器:

代替之前的dom/jquery操作,自動把模型中的資料和檢視中的html元素"繫結"在一起.

其實就是new vue()

原理: 新增一種新型別——vue:

包括: 2部分:

1. 建構函式——建立vue型別的例項物件

2. 原型物件——儲存所有vue型別子物件共有的成員(api)

new vue() 建立vue型別的乙個示例,其實是建立乙個用於同步model和view的viewmodel物件

new vue(

})//2. viewmodel控制器

var vm=new vue(

})//兩大系統:

//1. 響應系統: 通知vue有屬性發生更改

//2. 虛擬dom: 負責實際修改dom樹

什麼是繫結: 不需要寫一行**,就可讓頁面元素內容和資料保持聯動變化。

vue型別,提供的就是一種強大的viewmodel物件,可自動同步資料和頁面元素。

viewmodel的核心原理: 2部分:

響應系統(reactivity system):

記憶體中資料變,頁面自動變

原理:(每個記憶體中的資料,都被vue自動新增了訪問器屬性。)

new vue()將data中的每個模型資料提公升為整個vue物件的訪問器屬性。在訪問器屬性的set方法中,只要修改模型資料的值,就觸發通知。通知vue框架修改頁面。。

虛擬dom(virtual dom):

什麼是: 用js程式模擬的一棵簡化版的dom子樹

為什麼:真實dom樹包含的內容太多!極其不便於比較和遍歷。

如何生成虛擬dom樹:

new view()會查詢指定父元素,並遍歷其中所有子內容。僅將可能發生變化的元素和屬性用js物件結構集中儲存在記憶體中。

何時使用虛擬dom樹:

當修改模型資料,觸發響應系統時,響應系統通知vue要修改dom樹。vue框架就遍歷虛擬dom樹,找到發生變化的節點,利用底層的dom api僅修改發生變化的dom元素

用js物件導向方式,模擬的dom樹。

儲存了當前介面中所有dom節點的描述資訊,以及節點間關係。

優點1: 僅儲存關注的少部分節點屬性和內容,遍歷快!

當響應系統通知vue框架某個屬性發生變化,要修改頁面時,vue框架會快速遍歷虛擬dom樹,找出發生變化的dom元素節點,僅修改發生變化的真實dom樹上的節點。沒有發生變化的節點,保持不變。

優點2: 僅修改受影響的少量元素,效率高。——無需人工

總結:使用vue框架步驟:

定義html和css介面,只不過用特殊標識標記可能改變的位置

在記憶體中定義模型資料物件data,其中,頁面有幾處改變,data中就要有幾個模型變數與之對應。

建立new vue()示例物件,充當viewmodel

new vue()中定義el:「選擇器」,指向要監視的父元素

new vue()中,還要將data物件包含進來作為model

強調: 即使選擇器找到多個父元素,vue也只能監視第乙個找到的父元素及其子元素。

資料繫結語法:

}: 雙括號語法,也叫大鬍子語法(mustache)

官方名字: interpolation 補缺

什麼是: 可選擇特定的model中的資料,繫結到view檢視中

何時: 只要希望將model中的乙個資料,顯示到頁面上,就在頁面上用}引入

如何: }中可包含多種表示式:

直接寫}: }

}: 算術/比較/邏輯/三目運算:小計 }

}: }

}: }

}: }

注意: 不能寫if,else,for等程式結構(不止一句話,so不行)

問題: 只能繫結元素的內容(innerhtml),不能繫結屬性和事件

解決:

指令(directive):

什麼是: vue.js提供的,專門用於增強html功能的特殊屬性

為什麼: html本身是靜態的,寫死的,沒有任何動態生成內容的能力。

何時: 只要希望根據記憶體中的資料,動態繫結html元素的屬性和樣式時,都用指令。

包括: 看手冊: 官網/學習/api

如何: v-*, 凡是v-*開頭的自定義擴充套件屬性,都是vue為增強html功能而提供的指令。

v-bind: 專門繫結屬性值:

如何: v-for: 根據陣列或集合內容,反覆生成多個相同的html元素。

何時: 只要反覆生成多個相同的html元素時

如何:

3. v-if: 根據乙個bool資料作為條件,控制是否建立該元素到dom樹(控制顯示隱藏) 何時: 根據條件,控制乙個元素的顯示隱藏時 如何:

v-show: 用法和v-if幾乎完全一樣!也可以控制乙個元素的顯示隱藏。

鄙視: v-show vs v-if的區別:

v-show,不改變dom樹,通過display:none/block控制顯示隱藏

優: 效率高!

缺: 只適合控制乙個元素的顯示隱藏。如果控制多個元素的顯示隱藏時,**會很繁瑣

v-if,通過新增/刪除dom樹上元素節點的方式控制顯示隱藏

缺: 效率低!

優: 專門控制多個元素選其一顯示,**精簡。

如果乙個元素頻繁顯示隱藏切換,首選v-show

如果多個元素控制選其一顯示,首選v-if, v-else-if, v-else

v-if vs v-show:

v-if... 都是用新增刪除dom元素的方式,來控制顯示隱藏

v-show: 不改變dom的內容,通過display:none來控制顯示隱藏

1. 如果只控制乙個元素的顯示隱藏,首選v-show

2. 如果控制多個元素選其一顯示時,首選v-if

3. 如果頻繁顯示隱藏切換時,首選v-show,效率高

v-on: 為元素繫結事件處理函式

問題: 通常vue例項物件都是沒名的,為了避免衝突和全域性汙染。所以,在普通事件處理函式中,不可能訪問vue中的模型變數。

解決: v-on

何時: 今後只要在vue中繫結事件一律用v-on:

如何: 2步:

新增事件處理函式:

new vue(,

methods:}})

定義繫結: @事件名

被@替代:

v-html: 使用模型資料替換當前元素的innerhtml

何時: 要用html**片段替換內容

v-text: 使用模型資料替換當前元素的innertext

何時: 要用純文字內容代替元素內容

} vs v-text vs v-html

}可和其它內容拼接形成新的內容

v-text和v-html只能完整替換內容

如果繫結純文字內容,則首選v-text,原樣顯示,不轉換

如果繫結html片段,則首選v-html,會被瀏覽器轉換為正文,不保持原樣。

¥}v-cloak: 可讓未載入完的元素,暫時不顯示

問題: 當vue載入慢時,頁面會暫時顯示}內容

解決: 如果vue沒有載入完,則元素不顯示!

如何: 2步:

為vue監視的元素指定v-cloak屬性

手動在css中為v-cloak指定隱藏樣式:

[v-cloak]

原理: 當vue載入完成後,會自動移除v-cloak屬性!

總結: 今後被vue監視的父元素都要用v-cloak預設隱藏,等vue載入好後,才顯示出來。

v-pre: 保留當前元素中的},不進行繫結渲染

何時: 如果正文中有},不想被vue渲染,可用v-pre保護

vue使用}語法繫結元素的內容

10. v-once: 設定乙個},僅在首次載入時渲染一次,之後不再被監視。 何時: 如果希望乙個元素,只在首次載入時繫結一次 原理: 其實在vue中有乙個巨大的陣列,儲存著所有繫結的元素 每次模型資料有修改時,都通過遍歷陣列找到繫結的元素,修改元素。 v-once可在第一次載入後,將元素從監視陣列中移除!之後遍歷,無法遍歷到該元素,則值不會被改變!

data:,

建立自定義指令:

vue.directive(「自定義指令名」,

}) 強調: 定義指令名時, "自定義指令名"不加v-字首

在html中使用時,要加v-字首!

2. 在html元素上使用自定義指令:

vue.js例項/元件生命週期 鄙視題

生命週期: 從建立到銷毀的過程

vue.js例項/元件生命週期:

四個階段:

建立(create)階段:

new vue例項或元件物件建立完成

但尚未掛載dom樹

$el: undefined 沒有虛擬dom樹

data:

掛載(mount)階段:

元件載入dom樹完成

$el: dom元素

data:

更新(update)階段: 元件所繫結的model資料發生變化

銷毀(destroy)階段: 呼叫$destroy()方法,元件被銷毀。

為了在每個階段,觸發執行一項任務,vue為每個階段定義了生命週期鉤子函式

8個鉤子函式:

beforecreate(){}

created(){} ——可ajax請求獲取資料,不可dom操作

beforemount(){}

mounted(){} ——可ajax請求,又可dom操作

beforeupdate(){}

updated(){}

beforedestroy(){}

destroyed(){}

vue 的基本知識

mvc 與mvvm 的區別 mvcmvvm 後端框架 前端框架 專案中需要匯入相關的 vue包 與vue專案的基本格式 基本指令 插值表示式 輸出data裡面的資料 前後可以任意跟上想要的資料 v cloak 處理頁面沒有載入資料的時候顯示源生 的問題 v text 只能輸出data 裡面的資料 前...

vue基本知識(一)

一 常見指令 v cloak 用來解決閃爍問題 v text 預設沒有閃爍問題,會覆蓋掉元素中原來的內容 插值運算子,只會替換掉自己的佔位符,有閃爍問題 v html 輸出為html格式 會覆蓋 v bind 用來提供繫結屬性的指令,縮寫為 例如 v bind title mytitle v on ...

Oracle 基本知識

乙個表空間只能屬於乙個資料庫 每個資料庫最少有乙個控制檔案 建議3個,分別放在不同的磁碟上 每個資料庫最少有乙個表空間 system表空間 建立system表空間的目的是盡量將目的相同的表存放在一起,以提高使用效率,只應存放資料字典 每個資料庫最少有兩個聯機日誌組,每組最少乙個聯機日誌檔案 乙個資料...