第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在 Vue 中更新父數(shù)組中的子組件的正確方法是什么?

在 Vue 中更新父數(shù)組中的子組件的正確方法是什么?

猛跑小豬 2022-12-22 15:56:29
我是 Vue 的新手,希望得到一些關(guān)于最佳實(shí)踐的說明。我正在構(gòu)建一個(gè)使用數(shù)組來保留子組件列表的應(yīng)用程序,我希望能夠通過向父組件發(fā)送來更新和刪除組件。為了實(shí)現(xiàn)這一點(diǎn),我目前讓孩子檢查父數(shù)組以使用“等于”方法找到它的索引,以便它可以將該索引傳遞給父數(shù)組。這適用于簡單的事情,但如果我的子組件變得更復(fù)雜,我將不得不檢查越來越多的數(shù)據(jù)點(diǎn)以確保我正在更改正確的數(shù)據(jù)點(diǎn)。我能想到的另一種方法是在創(chuàng)建子組件時(shí)為子組件提供一個(gè) ID 道具,然后傳遞它,但隨后我必須處理以確保所有 ID 都不同。我是在正確的軌道上還是有更好的更廣泛接受的方法來做到這一點(diǎn)?我也嘗試過使用 indexOf(this._props) 來獲取索引,但這似乎不起作用。也許我只是做錯(cuò)了什么?這是我正在做的事情的簡化版本:// fake localStorage for snippet sandboxconst localStorage = {}Vue.component('child', {    template: '#template',    data() {        return {            newName: this.name        }    },    props: {        name: String    },    mounted() {        this.newName = this.name    },    methods: {        update() {            this.$emit(                "update-child",                this.$parent.children.findIndex(this.equals),                this.newName            )        },        equals(a) {            return a.name == this.name        }    }})var app = new Vue({    el: '#app',    data: {        children: []    },    methods: {        addNewChild() {            this.children.push({                name: 'New Child',            })        },        updateChild(index, newName) {            this.children[index].name = newName        }    },    mounted() {        if (localStorage.children) {            this.children = JSON.parse(localStorage.children)        }    },    watch: {        children(newChildren) {            localStorage.children = JSON.stringify(newChildren)        }    }})<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.min.js"></script><div id="app">    <button v-on:click="addNewChild">+ New Child</button>    <hr />    <child v-for="child in children"        :key="children.indexOf(child)"        :name="child.name"        @update-child="updateChild">    </child></div><script type="text/x-template" id="template">    <div>        <p><b>Name: {{name}}</b></p>        <input placeholder="Name" type="text" v-model="newName" />        <button @click="update">Update</button>        <hr />    </div></script>
查看完整描述

1 回答

?
守候你守候我

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超10個(gè)贊

最棒的v-for是它創(chuàng)建了自己的范圍??紤]到這一點(diǎn),您可以安全地child在事件處理程序中引用。例如


<child 

  v-for="(child, index) in children"

  :key="index"

  :name="child.name"

  @update-child="updateChild(child, $event)"

/>

updateChild(child, newName) {

  child.name = newName

}

您需要從子組件發(fā)出的只是新名稱,它將作為事件有效負(fù)載呈現(xiàn)$event


update() {

  this.$emit("update-child", this.newName)

}

關(guān)于:key...的快速注釋肯定會(huì)更好地鍵入child對(duì)象的某些獨(dú)特屬性(如id您所建議的那樣)。


如果您的數(shù)組僅改變大小,則可以鍵入數(shù)組索引,但如果您決定拼接或排序它,Vue 將無法正確響應(yīng)該更改,因?yàn)樗饕肋h(yuǎn)不會(huì)改變。


查看完整回答
反對(duì) 回復(fù) 2022-12-22
  • 1 回答
  • 0 關(guān)注
  • 102 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)