深入響應式原理:
當檢視模型(vm)中的資料模型(m)發生改變時, 檢視(v)就會進行更新
vue通過watcher將data中的屬性全部使用object.definepropery程式設計getter和setter,當屬性值發生
改變的時候, 就會觸發, 然後wather就會觸發, 告訴檢視(v)進行重新渲染
資料必須放在data選項中才能進行響應式
4.資料模型–》 vm中 的data選項
狀態管理
什麼叫做狀態?什麼叫做狀態管理?
我們使用乙個資料去管理檢視中的乙個部分, 那麼這條資料就叫做狀態, 這種管理模式就叫做狀態管理
底層原理:
核心使用的是es5的乙個方法,這個方法不支援ie8以及以下
object.
defineproperty
(obj,obj.attr,descriptor)
引數:
1.obj
要在其上定義屬性的物件。
2.prop
要定義或修改的屬性的名稱。
3.descriptor
將被定義或修改的屬性描述符。它是乙個物件, 這個物件有哪些構成?
configurable: 決定了物件的key是否可刪除
enumerable: 決定了物件是否可遍歷(列舉)
writeable: 決定了物件的key的value是否可修改
儲存器:
get函式 ----起了個名字getter 設定當前物件的key的初始值
set函式 ----起了個名字setter 修改當前物件的key的值
思考:如果資料沒有放在data中該怎麼使它成為響應式
例:
vm.num =
1000
//非響應式的
解決:
將非響應式屬性合併到響應式屬性身上
例
vue.
set(vm.list,
'num'
,1000
)//使用set方法
vue.
set(vm.someobj,prop,value)
this
.$set
(vm.someobj,prop,value)
思考
將乙個物件(key , value)合併另乙個物件身上
解決物件的合併: object.assign(目標物件, 當前物件)
總結以上:
1. 什麼是深入響應式原理?
深入響應式原理是利用了資料劫持和訂閱發布的模式, 當資料模型發生改變的時候, 檢視就會響應的進行更新, 那麼深入響應式原理是利用es5的object.defineproperty中個getter/setter來進行資料的劫持的
名稱解釋:
資料劫持: object.defineproperty中的getter/setter , 然後在執行watcher
訂閱發布:事件(自定義事件)
訂閱: 事件的宣告 vm.on發
布:事件
的觸發v
m.
on 發布: 事件的觸發 vm.
on發布:事
件的觸發
vm.emit
2. 非響應式情況
在vm模型的data外定義的屬性, 就是非響應式屬性, 非響應式屬性, 屬性值更新, 檢視不會更新
3. 非響應式屬性如何變成響應式屬性
思維: 將非響應式屬性合併到響應式屬性身上
解決: 利用了vue提供的 vue.set/this.$set(vm.dataattr,prop,value)
4. vue.set底層原生是什麼?
object.assign(目標物件,物件1, 物件2,物件3)
效果資料改變 , 檢視更改
檢視改變, 資料更改
實現使用v-model實現
缺點v-model預設繫結value屬性, 所以v-model只能在表單使用
原理 為什麼資料能直接在檢視顯示
v-model預設繫結了dom物件的value屬性, 當它初次繫結的時候,
就會觸發getter,watcher就會觸發, watcher通知vue生成新的vdom樹,
再通過render函式進行渲染,生成真實dom
為什麼檢視修改資料就會修改
當檢視修改時, 意味著dom的value屬性值改變,就會觸發setter,watcher監聽機制就會執行
watcher通知vue生成新的vdom樹,再通過render函式進行渲染,生成真實dom
5.watch
作用:用來監聽資料的變換, 當資料模型 (data選項 m)發生改變時, watch就會觸發
使用兩種用法:
key的value值是乙個函式 普通監聽
new
vue(}}
)
2. key的value值是乙個物件 深入監聽
new
vue(
// 監聽的處理函式}}
})
watch中的key指的就是data選項中key
例題:寫好姓和名,全稱自動顯示
第一種方式,使用的watch監聽
>
姓: "text" v-model =
"firstname"
>
<
/div>
名: "text" v-model =
"lastname"
>
<
/div>
全稱;"text" v-model =
"fullname"
>
<
/div>
<
/div>
<
/body>
newvue(,
watch:
,lastname
(val)
,fullname
(val)}}
)
第二種方式,使用計算屬性computed
>
姓: "text" v-model =
"firstname"
>
<
/div>
名: "text" v-model =
"lastname"
>
<
/div>
全稱 "text" v-model =
"fullname"
>
<
/div>
<
/div>
<
/body>
newvue(,
computed:}}
)<
/script>
vue深入響應式原理
資料模型 vm 建立的例項 new vue 中 的data選項 狀態管理 什麼叫做狀態?什麼叫做狀態管理?我們使用乙個資料去管理檢視中的乙個部分,那麼這條資料就叫做狀態,這種管理模式就叫做狀態管理 物件的建立 1.var obj 2.var obj new object 深入響應式原理 1.當檢視模...
vue深入響應式原理
資料模型 vm中 的data選項 狀態管理 什麼叫做狀態?什麼叫做狀態管理?我們使用乙個資料去管理檢視中的乙個部分,那麼這條資料就叫做狀態,這種管理模式就叫做狀態管理 總結 1.什麼是深入響應式原理?a.當檢視模型 vm 中的資料模型 m 發生改變時,檢視 v 就會進行更新 b.vue通過watch...
Vue響應式原理深入解析
vue最明顯的特性之一便是響應式系統,其資料模型即是普通的 j ascript 物件。而當你讀取或寫入它們時,檢視便會進行響應操作。響應式data div id exp div const vm new vue vm.message this is b 響應式 vm.message this is ...