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

Vue中直接操作數(shù)組索引不奏效的問題解讀

 更新時(shí)間:2022年09月10日 10:33:51   作者:SHIKARU  
這篇文章主要介紹了Vue中直接操作數(shù)組索引不奏效的問題解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Vue操作數(shù)組索引不奏效

1.案例

我們首先創(chuàng)造一個(gè)數(shù)組hobby并展示

data:{
hobby:["抽煙" , "喝酒" , "燙頭"]
}
<ul>
	<li v-for="(item , index) in hobby">{{item}}</li>
</ul>

此時(shí),我們?cè)诳刂婆_(tái)操作修改該數(shù)組

vm.hobby[0] = "運(yùn)動(dòng)"

會(huì)發(fā)現(xiàn)此時(shí)數(shù)組確實(shí)已經(jīng)修改,但頁面內(nèi)容并沒有改變

2.解釋

我們知道,Vue會(huì)對(duì)每一個(gè)data中的對(duì)象創(chuàng)建getter和setter方法,來實(shí)現(xiàn)響應(yīng)式

我們查看此數(shù)組,發(fā)現(xiàn)并沒有對(duì)每個(gè)數(shù)組元素的getter和setter方法的設(shè)置

此處為了方便理解,我們將該數(shù)組改為對(duì)象,對(duì)比一下

data: {
          hobby: {
            i1:"抽煙",
            i2:"喝酒",
            i3:"燙頭"
            }
    }

很明顯多了對(duì)于每一項(xiàng)的setter和getter方法的設(shè)置,這是響應(yīng)式的關(guān)鍵

3.如何操作數(shù)組

一.push、pop、shift、unshift、reverse、sort、splice等可以直接修改數(shù)組本身的方法,可以做到響應(yīng)式

vm.hobby.push('運(yùn)動(dòng)') //頁面實(shí)時(shí)更新了

二.使用Vue.set()方法

以上兩種方法都可以做到響應(yīng)式

4.深層原因

這里沿用上例。

此處調(diào)用的操作數(shù)組的方法push,其實(shí)已經(jīng)不是數(shù)組原型對(duì)象中的push了

Vue中存在的push,第一步先調(diào)用了Array原型對(duì)象的push,第二步重新解析模板,生成虛擬DOM

Vue 將被偵聽的數(shù)組的變更方法進(jìn)行了包裹,所以它們也將會(huì)觸發(fā)視圖更新。這些被包裹過的方法包括:

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

以上為官方文檔。 

多看看文檔總是會(huì)有收獲的

更新數(shù)組或?qū)ο蟛簧?/h2>

新增對(duì)象屬性不生效

<body>
    <div id="root">
        <button @click="updateInfo">更新學(xué)生信息</button>
        <div>姓名:{{student.name}}</div>
        <div>年齡:{{student.age}}</div>
        <div>性別:{{student.gender}}</div>
    </div>
    <script>
    Vue.config.productionTip = false;
    const vm = new Vue({
        el:"#root",
        data:{
            student:{
                name:"張三",
                age:18
            }
        },
        methods:{
            updateInfo(){
                this.student.gender = "男";
            }
        }
    })
    </script>
</body>

【問題描述】如上圖所示,this.student.gender = “男”,新增對(duì)象屬性不生效。

【解決方法】使用Vue.set(target,key,value)或者vm.$set(target,key,value),如下圖所示。

以下四個(gè)寫法均可。

Vue.set(vm.student,“gender”,“男”)
Vue.set(vm._data.student,“gender”,“男”)
vm.$set(vm.student,“gender”,“男”)
vm.$set(vm._data.student,“gender”,“男”)

所以,updateInfo函數(shù)可以改成這樣: 

<body>
    <div id="root">
        <button @click="updateInfo">更新學(xué)生信息</button>
        <div>姓名:{{student.name}}</div>
        <div>年齡:{{student.age}}</div>
        <div v-if="student.gender">性別:{{student.gender}}</div>
    </div>
    <script>
    Vue.config.productionTip = false;
    const vm = new Vue({
        el:"#root",
        data:{
            student:{
                name:"張三",
                age:18,
            }
        },
        methods:{
            updateInfo(){
                // Vue.set(this.student,"gender","男");
                this.$set(this.student,"gender","男");
            }
        }
    })
    </script>
</body>

更新數(shù)組元素不生效

<body>
    <div id="root">
        <button @click="updateInfo">更新馬某梅的信息</button>
        <ul>
            <li v-for="(p,index) of persons" :key="p.id">
                {{p.name}}-{{p.age}}-{{p.gender}}
            </li>
        </ul>
    </div>
    <script>
    Vue.config.productionTip = false;
    new Vue({
        el:"#root",
        data:{
            persons:[
                {id:"001",name:"周冬雨",age:18,gender:"女"},
                {id:"002",name:"馬冬梅",age:19,gender:"女"},
                {id:"003",name:"張桂梅",age:59,gender:"女"},
                {id:"004",name:"周杰倫",age:30,gender:"男"}
            ]
        },
        methods:{
                updateInfo(){
                    //更新 奏效
                    // this.persons[1].name = "馬鐵梅";
                    // this.persons[1].age = 25;
                    // this.persons[1].gender = "男";
                    //更新 不奏效
                    this.persons[1] = {
                   		id:"002",
                        name:"馬鐵梅",
                        age:25,
                        gender:"男"
                    }
                }
            }
    })
    </script>
</body>

【問題描述】this.persons[1]={name:xxx,age:xxx,gender},更新數(shù)組元素不生效。

【解決方法】有兩種解決方法:

使用方法splice更新數(shù)組,如下所示。

this.persons.splice(1,1,{
    id:"002",
    name:"馬鐵梅",
    age:25,
    gender:"男"
})

使用Vue.set(target,key,value)或者vm.$set(target,key,value)

this.$set(this.persons,1,{
    id:"002",
    name:"馬鐵梅",
    age:25,
    gender:"男"                        
})
//或者
Vue.set(this.persons,1,{
    id:"002",
    name:"馬鐵梅",
    age:25,
    gender:"男"                                 
})

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

相關(guān)文章

  • 使用Vue 自定義文件選擇器組件的實(shí)例代碼

    使用Vue 自定義文件選擇器組件的實(shí)例代碼

    這篇文章主要介紹了使用Vue 自定義文件選擇器組件的實(shí)例代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • vue項(xiàng)目中data數(shù)據(jù)之間互相訪問的實(shí)現(xiàn)

    vue項(xiàng)目中data數(shù)據(jù)之間互相訪問的實(shí)現(xiàn)

    本文主要介紹了vue項(xiàng)目中data數(shù)據(jù)之間互相訪問的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • vue實(shí)現(xiàn)拖拽進(jìn)度條

    vue實(shí)現(xiàn)拖拽進(jìn)度條

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)拖拽進(jìn)度條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • Element?Plus修改表格行和單元格樣式詳解

    Element?Plus修改表格行和單元格樣式詳解

    在使用Element Plus中的table組件展示數(shù)據(jù)時(shí),由于需要對(duì)表格行內(nèi)數(shù)據(jù)的數(shù)據(jù)進(jìn)行修改,下面這篇文章主要給大家介紹了關(guān)于Element?Plus修改表格行和單元格樣式的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • 使用vue-element-admin框架從后端動(dòng)態(tài)獲取菜單功能的實(shí)現(xiàn)

    使用vue-element-admin框架從后端動(dòng)態(tài)獲取菜單功能的實(shí)現(xiàn)

    &#8203; vue-element-admin是一個(gè)純前端的框架,左側(cè)菜單是根據(jù)路由生成的。實(shí)際開發(fā)中經(jīng)常需要根據(jù)當(dāng)前登陸人員的信息從后端獲取菜單進(jìn)行展示,本文將詳細(xì)介紹如何實(shí)現(xiàn)該功能
    2021-04-04
  • element-ui 表格sortable排序手動(dòng)js清除方式

    element-ui 表格sortable排序手動(dòng)js清除方式

    這篇文章主要介紹了element-ui 表格sortable排序手動(dòng)js清除方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • vue解決一個(gè)方法同時(shí)發(fā)送多個(gè)請(qǐng)求的問題

    vue解決一個(gè)方法同時(shí)發(fā)送多個(gè)請(qǐng)求的問題

    今天小編就為大家分享一篇vue解決一個(gè)方法同時(shí)發(fā)送多個(gè)請(qǐng)求的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • vue下canvas裁剪圖片實(shí)例講解

    vue下canvas裁剪圖片實(shí)例講解

    在本篇文章里小編給大家整理了關(guān)于vue下canvas裁剪圖片實(shí)例講解內(nèi)容,需要的朋友們可以參考下。
    2020-04-04
  • vue3+typescript實(shí)現(xiàn)圖片懶加載插件

    vue3+typescript實(shí)現(xiàn)圖片懶加載插件

    這篇文章主要介紹了vue3+typescript實(shí)現(xiàn)圖片懶加載插件,幫助大家更好的理解和使用vue,感興趣的朋友可以了解下
    2020-10-10
  • 裝飾者模式在日常開發(fā)中的縮影和vue中的使用詳解

    裝飾者模式在日常開發(fā)中的縮影和vue中的使用詳解

    這篇文章主要為大家介紹了裝飾者模式在日常開發(fā)中的縮影和vue中的使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12

最新評(píng)論

兴城市| 宁城县| 长治市| 德格县| 乡宁县| 普兰县| 康平县| 青田县| 临朐县| 潼关县| 新竹县| 阿坝| 万载县| 新泰市| 连平县| 安乡县| 梓潼县| 合山市| 彭泽县| 浦城县| 涟水县| 江西省| 精河县| 天镇县| 新疆| 抚顺市| 白水县| 白玉县| 翼城县| 望城县| 横峰县| 泰来县| 砚山县| 舞阳县| 赤城县| 陆丰市| 镶黄旗| 莱芜市| 瓮安县| 文登市| 越西县|