欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue如何修改data中的obj數(shù)據(jù)的屬性

 更新時間:2022年08月03日 11:16:32   作者:乾復道  
這篇文章主要介紹了vue如何修改data中的obj數(shù)據(jù)的屬性,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

修改data中的obj數(shù)據(jù)的屬性

//方法一
var obj = this.obj;
obj.name = 'long';
this.obj = obj;
//方法二
Vue.set(this.obj, "password", "num");
//part1,要修改的obj對象;
//part2,要添加或者修改的屬性;
//part3,修改值;

修改data以實現(xiàn)數(shù)據(jù)響應式

Vue為了實現(xiàn)在數(shù)據(jù)變化時對頁面重新渲染。所以在初始化時對傳進來來的數(shù)據(jù)對象進行監(jiān)聽。

怎么保證你的變化我Vue能監(jiān)聽到?

監(jiān)聽的操作就是:對數(shù)據(jù)對象的每一個數(shù)據(jù),內(nèi)部內(nèi)部聲明一個變量,存儲這個傳進來的初始值,然后開始了代理模式。后續(xù)對這個數(shù)據(jù)的讀取和修改,實際都是對這個內(nèi)部變量的getter和setter。由此所有的修改都會經(jīng)過setter,那么只需要setter的時候觸發(fā)監(jiān)聽函數(shù),渲染頁面即可。

當你把一個普通的 JavaScript 對象傳入 Vue 實例作為 data 選項,Vue 將遍歷此對象所有的 property,并使用 Object.defineProperty 把這些 property 全部轉為 getter/setter。

每個組件實例都對應一個 watcher 實例,它會在組件渲染的過程中把“接觸”過的數(shù)據(jù) property 記錄為依賴。之后當依賴項的 setter 觸發(fā)時,會通知 watcher,從而使它關聯(lián)的組件重新渲染。

那么返回給外部的,實際是一個經(jīng)過篡改的,經(jīng)過了代理的數(shù)據(jù)對象。

如果初始值沒給這個變量Vue還能監(jiān)聽嗎?

這里面有個新手易犯的問題是:一開始傳進數(shù)據(jù)對象時忘記傳這個變量或無法傳這個變量。

由于 JavaScript 的限制,Vue 不能檢測數(shù)組和對象的變化。

如果后面使用了這個變量,那么后面對這個變量進行更新時頁面不會變化的,因為vue根本沒監(jiān)聽這個對象。

解決辦法:

(1)一開始就傳入這個變量;

(2)對于對象:使用Vue.set或vm.$ set在使用之前監(jiān)聽變量;

(3)對于數(shù)組,除了使用對象的Vue.set或和vm.$set 方法。尤雨溪其實對數(shù)組的如下方法進行了封裝,使用這些方法的時候已經(jīng)進行了set監(jiān)聽。

  • push()
  • pop()
  • shift()
  • unshift()
  • splice()
  • sort()
  • reverse()

有一個神奇的測試題:

<div id="app">
? ? <span class=span-a>
? ? ? {{obj.a}}?
? ? </span>
? ? <span class=span-b>
? ? ? {{obj.b}}
? ? </span>
? </div>
var app = new Vue({
? el: '#app',
? data: {
? ? obj: {
? ? ? a: 'a',
? ? }
? },
})
app.obj.a = 'a2'
app.obj.b = 'b'

最終 span-a 和 span-b 中分別展示什么字符串?答案是:a2和b

原因是視圖在顯示 span-a 的 a2 時,順便更新了 span-b

視圖更新其實是異步的。

1、當我們讓 a 從 ‘a1’ 變成 ‘a2’ 時,Vue 會監(jiān)聽到這個變化,但是 Vue 并不能馬上更新視圖,因為 Vue 是使用 Object.defineProperty 這樣的方式來監(jiān)聽變化的,監(jiān)聽到變化后會創(chuàng)建一個視圖更新任務到任務隊列里。(文檔有寫)

2、所以在視圖更新之前,要先把余下的代碼運行完才行,也就是會運行 b = ‘b’。

3、等到視圖更新的時候,由于 Vue 會去做 diff(文檔有寫),于是 Vue 就會發(fā)現(xiàn) a 和 b 都變了,自然會去更新 span-a 和 span-b。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。 

相關文章

  • 記錄一個van-list不斷onLoad加載的坑及解決

    記錄一個van-list不斷onLoad加載的坑及解決

    這篇文章主要介紹了記錄一個van-list不斷onLoad加載的坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue Render中slots的使用的實例代碼

    vue Render中slots的使用的實例代碼

    本篇文章主要介紹了vue Render中slots的使用的實例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-07-07
  • Vue.js實現(xiàn)的表格增加刪除demo示例

    Vue.js實現(xiàn)的表格增加刪除demo示例

    這篇文章主要介紹了Vue.js實現(xiàn)的表格增加刪除demo,結合實例形式分析了vue.js數(shù)據(jù)綁定及元素增加、刪除等相關操作技巧,需要的朋友可以參考下
    2018-05-05
  • VUE跨域詳解以及常用解決跨域的方法

    VUE跨域詳解以及常用解決跨域的方法

    跨域指瀏覽器不允許當前頁面的所在的源去請求另一個源的數(shù)據(jù),下面這篇文章主要給大家介紹了關于VUE跨域詳解以及常用解決跨域的方法,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • vue中的eventBus會不會產(chǎn)生內(nèi)存泄漏你知道嗎

    vue中的eventBus會不會產(chǎn)生內(nèi)存泄漏你知道嗎

    這篇文章主要為大家詳細介紹了vue中的eventBus會不會產(chǎn)生內(nèi)存泄漏,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • vue-content-loader內(nèi)容加載器的使用方法

    vue-content-loader內(nèi)容加載器的使用方法

    這篇文章主要介紹了vue-content-loader內(nèi)容加載器的使用方法,本文分步驟給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-08-08
  • 解決el-upload批量上傳只執(zhí)行一次成功回調(diào)on-success的問題

    解決el-upload批量上傳只執(zhí)行一次成功回調(diào)on-success的問題

    這篇文章主要介紹了解決el-upload批量上傳只執(zhí)行一次成功回調(diào)on-success的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Vue封裝--如何將數(shù)字轉換成萬

    Vue封裝--如何將數(shù)字轉換成萬

    這篇文章主要介紹了Vue封裝--將數(shù)字轉換成萬的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • vue請求按順序執(zhí)行的示例詳解

    vue請求按順序執(zhí)行的示例詳解

    我們有時候會碰到這種情況,需要連續(xù)發(fā)送兩個請求,第二個請求需要用第一個請求的某個返回值作為參數(shù)來作為第二個請求的請求參數(shù),這篇文章主要介紹了vue請求如何按順序執(zhí)行,需要的朋友可以參考下
    2023-12-12
  • vue-router實現(xiàn)嵌套路由的講解

    vue-router實現(xiàn)嵌套路由的講解

    今天小編就為大家分享一篇關于vue-router實現(xiàn)嵌套路由的講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01

最新評論