Я использую Vue2 и хотел бы иметь компонент выбранного элемента, который можно использовать повторно. Он будет иметь ссылку на элемент, который может отправить сообщение по шине событий, чтобы установить для элемента значение NULL. Это также мой первый раз, когда я работаю с Vue, а не в сценарии с одним файлом - compnent / vue.
У меня есть следующий код, и я прокомментировал проблемную строку:
var bus = new Vue()
Vue.component('selected-item', {
props: ['item'],
methods: {
setToNull(item){
bus.$emit('setToNull', item);
}
},
template: `<span>
<div class="button round btn-app-class selected-btn">{{item.name}}<sup><span class='btn-delete link' @click="setToNull(item)">x</span></sup></div>
</span>
`
})
var vm = new Vue({
template:`
<div>
<div v-if="selectedApp">
<selected-item :item="selectedApp"></selected-item>
</div>
<div v-else>
no app selected
</div>
</div>
`,
data(){
return {
selectedApp: {id: 1, name: 'here is my name'}
}
},
mounted(){
bus.$on('setToNull', function (item) {
alert('within setToNull for: ' + item.name); // this works and outputs here is my name
item = null; // this doesn't work
})
}
})
Что я делаю не так? Есть лучший способ сделать это?
edit # 1
похоже, что установка selectedApp для захвата встроенного события работает! Также убрал шину и какой-то посторонний код. Вот так:
<selected-item @remove="selectedApp = null" :item="selectedApp"></selected-item>
https://jsfiddle.net/qnub8xen/