我有一個child
組件和parent
組件。父組件動態地(即按需)呈現子組件,並將記錄保存在數組中。當一個子組件需要被移除時,它發出事件並因此傳遞其ID以便在記錄中被識別。儘管記錄基於id被刪除,但最後創建的實例始終被刪除。即使您點擊第一個孩子,也只會刪除最後一個孩子。動態創建組件總是刪除最後一個實例
Here是與我的情況相同的鏈接,但只是以簡單的形式。 我在SO上做過研究,發現這個answer的小提琴是here。所以我確實在另一個中遵循了它的模式,但結果沒有什麼不同。
我不知道這裏有什麼問題......我做錯了什麼?
更新1:添加的代碼
更新2:檢查第一個鏈接,如果你想跳過下面
ChatPanel.vue
<template>
<div class="chat-container">
<div class="columns" style="justify-content: flex-end;">
<div class="column is-3" style="order: 1;">
<div class="chat-panel">
<nav class="panel state" :class="[statusIn ? 'in' : 'out']">
<p class="panel-heading">
Arbab Nazar
<span id="click-handle" @click="toggleState"></span>
</p>
<div class="panel-block">
<p class="control has-icons-left">
<input class="input is-small" type="text" placeholder="search">
<span class="icon is-small is-left">
<i class="fa fa-search"></i>
</span>
</p>
</div>
<p class="panel-tabs">
<a class="is-active">all</a>
<a>Online</a>
<a>Sleeping</a>
</p>
<chat-list/>
</nav>
</div>
</div>
<chat-window v-for="(window, index) in windows"
:identity="index"
v-on:remove-window="removeWindow(window)"
/>
</div>
</div>
</template>
<script>
import ChatList from './ChatList'
import ChatWindow from './ChatWindow'
import Bus from '../Events/Bus.js'
export default {
name: 'chatpanel',
data() {
return {
statusIn: true,
windows: [],
id: Number
}
},
mounted() {
Bus.$on('new-window', (data)=> {
this.windows.push((this.windows.length+1))
})
},
methods: {
toggleState(event) {
event.stopPropagation()
this.statusIn = !this.statusIn
},
removeWindow(window) {
this.windows.splice(this.windows.indexOf(window),1)
}
},
components: {
ChatList,
ChatWindow
}
}
</script>
ChatWindow.vue
<template>
<div class="column is-2">
<div class="chat-window-container" :class="{'reset': statusIn}">
<div class="card state" :class="[statusIn ? 'in' : 'out']">
<header class="card-header">
Ahmad Jan
<a class="delete" @click="$emit('remove-window')"></a>
<span id="click-handle" @click="toggleState"></span>
</header>
<div class="card-content">
<template v-for="message in messages">
<p>
{{ message }}
</p>
</template>
</div>
</div>
<div class="field has-addons">
<div class="control is-expanded">
<input class="input" type="text"
placeholder="Write something amazing..."
@keyup.enter="sendMessage" v-model="messageText"
>
</div>
<div class="control">
<a class="button is-primary"
@click="sendMessage"
style="background:rgb(0, 184, 255)"
>
Send
</a>
</div>
</div>
</div>
</div>
</template>
<script>
import Bus from '../Events/Bus.js'
export default {
props:['identity'],
data() {
return {
messageText: '',
messages: [],
statusIn: true,
id: ''
}
},
created() {
this.id = this.identity
},
methods: {
sendMessage(event) {
this.messages.push(this.messageText)
this.messageText = ''
console.log('msg', event.target.value)
// this.messages
},
toggleState(event) {
event.stopPropagation()
this.statusIn = !this.statusIn
},
removeWindow(id) {
console.log(`remove window with id ${id}`)
Bus.$emit('remove-window', {id})
}
}
}
</script>
ChatList.vue
<template>
<div style="overflow-y: scroll;max-height: 17.5rem;">
<template v-for="chat in chats">
<chatter :user="chat"></chatter>
</template>
</div>
</template>
<script>
import Chatter from './Chatter'
export default {
props:{},
data() {
return {
chats: [
{ name: 'Abdul Hameed', active: true },
{ name: 'Ahmad Jan', active: false },
{ name: 'Murad Surkhab', active: false },
{ name: 'Angelo Mathews', active: false },
{ name: 'Hasan Ali', active: true },
{ name: 'Fakhar-ud-Din', active: true },
{ name: 'Sultan Usman', active: true },
{ name: 'Muad Saeed', active: false },
{ name: 'Saleem Yousaf', active: false }]
}
},
components: {
Chatter
}
}
</script>
Chatter.vue
<template>
<div>
<a class="panel-block" :class="{'is-active':user.active }" @click="letsCaht">
<div style="display: flex;">
<p class="image is-24x24 chat-image" >
<img src="http://bulma.io/images/placeholders/96x96.png">
</p>
<p class="content">
{{user.name}}
</p>
</div>
<span class="panel-icon">
<i class="fa fa-comments"></i>
</span>
</a>
</div>
</template>
<script>
import Bus from '../Events/Bus.js'
export default {
props:['user'],
methods: {
letsCaht(event) {
Bus.$emit('new-window', {user: this.user})
console.log(`${this.user.name} is listening`)
}
},
components: {}
}
</script>
怎麼樣一些代碼? –
@EliranMalka代碼非常複雜,所以我添加了一個類似於我的問題的鏈接,但它的格式很簡單。這裏是鏈接https://jsfiddle.net/Lahori/v0z02cna/ – Lahori
這實際上是問題的一部分。如果您提供導致問題的最簡單,簡明的代碼片段,那麼您將縮小到有問題的代碼(無論如何,您應該這樣做) –