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表空間的目的是盡量將目的相同的表存放在一起,以提高使用效率,只應存放資料字典 每個資料庫最少有兩個聯機日誌組,每組最少乙個聯機日誌檔案 乙個資料...