資料變化,頁面就會重新渲染
>
}div
>
const vm =
newvue(}
);
這時候我們在頁面的控制台裡面修改資料
vm.msg =
"hello vue"
這時候我們發現,頁面改變了。
為什麼data裡面的資料會直接出現在vue例項物件中?
當建立vue例項時,vue會將data中的資料**給vue例項,目的是為了實現響應式,監控資料變化,執行監聽函式。
更改的資料必須是存在的資料,否則不能重新渲染頁面,也必須是頁面上渲染過的資料,否則也不能重新渲染
vue更新dom的操作是非同步執行的,只要偵聽到資料變化,將開啟乙個非同步佇列,如果乙個資料被多次變更,那麼只會被推入到佇列中一次,這樣可以避免不必要的計算和dom操作。可以證明,更改資料後,vue開啟了乙個非同步佇列。vm.$el是vue掛載的元素。
可以使用vm.$nexttick或者vue.nexttick。在頁面重新渲染後,會立刻執行
這兩個函式。這兩個函式也可以當做promise使用
const vm =
newvue(}
);vm.msg =
"hello vue"
;console.
log(vm.msg)
;vm.
$nexttick((
)=>);
vue.
nexttick((
)=>
)
vue.nexttick內部函式的this指向window利用陣列的變異方法:push、pop、shift、unshift、splice、sort、reverse。這些方法不是原生js的方法,而是vue重寫過後的方法vm.$nexttick內部函式的this指向vue例項物件
利用vm.$set或者vue.set方法
利用vm.$delete或者vue.delete
利用索引直接設定陣列項,修改陣列長度,新增或刪除物件都不是響應式的
>}}
div>
如果我們通過下面的方式改變陣列或物件,那麼頁面不會重新渲染。const vm =
newvue(}});
vm.people[3]
="小白"
;vm.people.length =0;
vm.obj.wife =
"小紅"
;delete vm.obj.age;
vue響應式布局 Vue 響應式原理
vue2 的資料偵測 在 src observer 目錄裡面,元件例項在初始化時,會呼叫 observe 函式處理 data function initdata vm observe 改寫了所有物件屬性的 getter setter 和陣列原型上的 7 個會改寫陣列方法,從而讓 data 變成可響應...
Vue的響應式
vue2中,實現響應式的原理是使用es5的object.defineproperty,重寫了幾乎所有屬性的getter和setter。object.defineproperty 1.1 可配置的屬性 const object1 object.defineproperty object1,proper...
vue的響應式系統 和響應式原理
web m v 組成 mvc 發生在後端 mvc 是一種使用 mvc model view controller 模型 檢視 控制器 設計建立 web 應用 model 模型 表示應用程式核心 比如資料庫記錄列表 view 檢視 顯示資料 資料庫記錄 controller 控制器 處理輸入 寫入資料...