最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue如何監(jiān)測數(shù)組類型數(shù)據(jù)發(fā)生改變的(推薦)

 更新時間:2022年11月03日 08:25:02   作者:瀾璨  
這篇文章主要介紹了Vue如何監(jiān)測數(shù)組類型數(shù)據(jù)發(fā)生改變的,本文通過實例代碼圖文詳解給大家講解的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

通過上一節(jié),我們知道了vue檢測對象數(shù)據(jù)發(fā)生改變的原理

但是還有個api我們沒有講解,Vue.set();

這個API比較適合在理解了對象檢測的原理后進行講解

案例準備

html

<!-- 創(chuàng)建一個容器 -->
    <div class="app">
        <h1>姓名:{{student.name}}</h1>
        <h1>年齡:{{student.age}}</h1><br>
        <h2>朋友們</h2>
        <ul>
            <!-- 列表渲染 == friends -->
            <li v-for="(item,index) in friends">
                {{item.name}}-{{item.rage}}-{{item.mage}}
            </li>
        </ul>
    </div>

data配置項

<script>
    const vm = new Vue({
        el: '.app',
        data: {
            student: {
                name: 'wavesbright',
                age: 21,
            },
            friends: [ // 真實年齡,內心年齡
                {name: "Jack",rage: 32,mage: 40},
                {name: "Jony",rage: 24,mage: 45},
                {name: "Jone",rage: 28,mage: 50},
            ]
        },
        methods: {

        },
    });
</script>

頁面效果

需求

  • 我的數(shù)據(jù)都是寫在data當中的,通過vue的數(shù)據(jù)代理
  • 在頁面當中實現(xiàn)了響應式開發(fā)
  • 那么現(xiàn)在有一個問題
  • 我想給,student 添加一個屬性,這個屬性是后來添加的,不是之前就添加的
  • 想讓 這個屬性能夠實現(xiàn)響應式,應該如何實現(xiàn)?

錯誤示范

1.直接在vm后面加個屬性不就完了?

2.修改 _data,然后給它添加一個屬性?

  • 上述兩個操作的問題,添加的屬性沒有進行數(shù)據(jù)代理
  • 無法完成響應式
  • 仔細看的話,在student這個對象當中,sex這個屬性是沒有get和set函數(shù)的

添加測試

我們在這里添加一個渲染項,然后我們添加屬性試試,現(xiàn)在我data當中是沒有這個屬性的

并不能被vue所識別到

那么我們后面想要自己添加屬性就沒有辦法完成響應式了嗎,誒,這就是我們接下來要引入的API

Vue.set()

  • 該API需要三個參數(shù)

  • target: 目標
  • key: 添加的屬性名
  • val: 添加的屬性值

我現(xiàn)在算是明白了,小程序的 this.setData() 就是從這里變來的

這里其實應該是 .student的;因為操作的都是同一個對象的地址

set的局限性

我現(xiàn)在要在data當中,添加一個屬性,這個屬性是leader == 校長

我們使用.set添加試試

  • 這里報錯的意思就是,不允許直接在vue實例身上添加一個屬性
  • 解讀一下這段話哈
    • 我現(xiàn)在是在_data當中添加屬性
    • 但是這個添加的屬性,最后會掛載在vue實例身上
    • 所以,這里使用.set是不允許的,不能直接添加
  • .set()不能在data當中直接添加屬性
  • 只能給data當中的某個對象(student)添加屬性

vm是不能作為target的,vm當中的data,也不能作為target

監(jiān)測數(shù)組

準備工作

  • 新建一個demo,重新配置了數(shù)據(jù)項data
  • 在data當中有兩個屬性,一個numbers的數(shù)組,一個student的對象
  • 我們查看vue實例對象,在查看之前可以很明確的說,numbers 和 student 都掛載在了vue實例身上,并且,有專門為他倆服務的get和set

數(shù)據(jù)代理

現(xiàn)在我們點擊去看看二者有什么不同,或者說,vue當中對數(shù)組和對象類型的數(shù)據(jù)是如何代理的

數(shù)組和對象的不同

數(shù)組

對象

區(qū)別,目前而言

  • 數(shù)組當中的數(shù)據(jù),是沒有進行數(shù)據(jù)代理的,沒有專門為 元素 服務 的 get和set
  • 而對象當中,每個屬性都是有get和set的,哪怕這個屬性是對象也有
  • 也就是說,如果我們直接在vue當中直接修改numbers對應索引的值,vue是觀測不到的

直接修改numbers

我們寫一串DOM元素進行測試

<div class="app">
    <ul>
    	<li v-for="item in numbers">{{item}}</li>	
    </ul>
</div>

現(xiàn)在,我直接在控制臺中對數(shù)組當中的元素進行修改

我們將最后一項 從5改為6

數(shù)據(jù)的確修改成功了,但是vue檢測不到,頁面無法響應

之前的錯誤解釋

現(xiàn)在,我們來回顧一下之前遇到的bug,我們添加一個persons對象數(shù)組

從控制臺我們來觀察一下這個persons

  • 這是一個對象數(shù)組,這個數(shù)組當中的每一項數(shù)據(jù),都沒有被進行數(shù)據(jù)代理
  • 但是因為每一項 數(shù)據(jù) 都是對象類型,所以 在對象類型當中 數(shù)據(jù)是進行了代理(get和set)的

3.這里很重要,請仔細看

所以為什么下面的修改不起作用,因為根本沒代理,沒有代理無法完成響應式數(shù)據(jù)

這個問題解決了順勢拋出下一個問題,vue怎么就知道數(shù)組內部的屬性發(fā)生改變了呢,它是如何監(jiān)測到的?

vue如何監(jiān)測?

  • 藍色框當中的都是可以對數(shù)組進行修改的,會改變原有數(shù)組結構
  • 但是filter不會,他會返回一個新數(shù)組,不修改原數(shù)組
  • arr 調用了藍色框框當中的數(shù)組API,自身才會發(fā)生改變
  • vue當中規(guī)定,你只有使用了上述的7個方法,我才承認你修改數(shù)組了

那它咋知道我調用了上面的7個API呢?

包裝技術

原形

使用 Array這個原形對象身上的 push 舉例子

這個push,是給數(shù)組調用的

我們在控制臺上來個數(shù)組

這個push是哪里來的?==> 其實是一層一層嵌套的,從原形對象身上來的

二者身上的push是相等的

vue

vue身上的數(shù)組,使用的并不是 原形數(shù)組Array身上的 API函數(shù)

如何測試?

很簡單,回到我們剛剛的案例

這下您能明白了嗎

流程

當你對一個被vue所管理的數(shù)組進行了api的調用(push,shift,unshift.....)

你調用的這個API,就不是原型對象Array身上的API了;而是vue的api

在這個api當中,會做兩個步驟

  • 調用原形身上的API(push.....)
  • 重新解析模板,生成虛擬dom.......那一套流程

是這么一回事嗎,我們看下官網是如何解答的

官網尋找答案

點我跳轉

  • 點擊 列表渲染
  • 點擊 數(shù)組更新檢測

我們來看這句話

enmmmm,后面沒講了,基本其實到這里就差不多了,后面的都需要在實際開發(fā)當中去慢慢琢磨了。

到此這篇關于Vue如何監(jiān)測數(shù)組類型數(shù)據(jù)發(fā)生改變的?的文章就介紹到這了,更多相關Vue監(jiān)測數(shù)組類型數(shù)據(jù)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 學習vue.js中class與style綁定

    學習vue.js中class與style綁定

    這篇文章主要和大家一起學習vue.js中class與style綁定操作,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • Vue生命周期和鉤子函數(shù)的詳解與經典面試題

    Vue生命周期和鉤子函數(shù)的詳解與經典面試題

    Vue生命周期是指vue實例對象從創(chuàng)建之初到銷毀的過程,vue所有功能的實現(xiàn)都是圍繞其生命周期進行的,下面這篇文章主要給大家介紹了關于Vue生命周期和鉤子函數(shù)的相關資料,需要的朋友可以參考下
    2021-10-10
  • Vue3中Transition和TransitionGroup組件的使用及說明

    Vue3中Transition和TransitionGroup組件的使用及說明

    本文將深入探討這兩個組件的作用,以及如何在實際項目中靈活運用它們,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • vue實現(xiàn)ajax滾動下拉加載,同時具有l(wèi)oading效果(推薦)

    vue實現(xiàn)ajax滾動下拉加載,同時具有l(wèi)oading效果(推薦)

    這篇文章主要介紹了vue實現(xiàn)ajax滾動下拉加載,同時具有l(wèi)oading效果的實現(xiàn)代碼,文章包括難點說明,介紹的非常詳細,感興趣的朋友參考下
    2017-01-01
  • vue中element-ui表格縮略圖懸浮放大功能的實例代碼

    vue中element-ui表格縮略圖懸浮放大功能的實例代碼

    element-ui界面非常簡潔和美觀,提供的組件可以滿足絕大多數(shù)的應用場景,當表格中顯示了圖片的縮略圖時,想要鼠標浮動在縮略圖上時放大圖片的效果,該如何實現(xiàn)呢?下面小編通過實例代碼給大家介紹vue中element-ui表格縮略圖懸浮放大功能,一起看看吧
    2018-06-06
  • Vue自定義el-table表格表頭高度的多種實現(xiàn)方法

    Vue自定義el-table表格表頭高度的多種實現(xiàn)方法

    在Vue項目中,使用Element?UI的el-table組件可以輕松創(chuàng)建功能豐富的表格,然而,默認情況下,el-table的表頭高度是固定的,本文將詳細介紹如何自定義el-table表頭的高度,提供多種實現(xiàn)方法,需要的朋友可以參考下
    2024-10-10
  • vue中為何方法要寫在methods的里面

    vue中為何方法要寫在methods的里面

    這篇文章主要介紹了vue中為何方法要寫在methods的里面,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • VUE跳轉外部鏈接與網頁的方法示例

    VUE跳轉外部鏈接與網頁的方法示例

    這篇文章主要給大家介紹了關于VUE跳轉外部鏈接與網頁的方法,記錄一下在vue項目中如何實現(xiàn)跳轉到一個新頁面,需要的朋友可以參考下
    2023-06-06
  • TypeScript在vue中的使用解讀

    TypeScript在vue中的使用解讀

    這篇文章主要介紹了TypeScript在vue中的使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Electron+vue從零開始打造一個本地播放器的方法示例

    Electron+vue從零開始打造一個本地播放器的方法示例

    這篇文章主要介紹了Electron+vue從零開始打造一個本地播放器的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10

最新評論

同江市| 万全县| 克山县| 廊坊市| 万源市| 延寿县| 昌都县| 额尔古纳市| 永济市| 义马市| 临潭县| 金山区| 泸州市| 香河县| 闻喜县| 章丘市| 乐安县| 子洲县| 奇台县| 泽州县| 明溪县| 福州市| 内乡县| 吉安市| 那坡县| 常德市| 洪江市| 综艺| 曲沃县| 龙海市| 衡阳县| 虞城县| 永城市| 宜阳县| 高青县| 绥棱县| 磐安县| 栾城县| 甘孜县| 清涧县| 汤阴县|