Здравствуйте.
Имеются 2 компонента: список и элемент списка.
См. код ниже.
Проблема в следующем:
В качестве значения одного из входных параметров (isEdit), я пытаюсь использовать значение свойства объекта (editState)
Но когда я меняю значение свойства, значение соответствущего props не меняется.
Т.е. реактивность в этом случает не работает?
Как бы реалировать задуманное?
Список:
<template>
<div class="edit-tag-list">
<h3>Список тегов</h3>
<EditTagItem
v-for="(tagName, key) in tagsAsArray" :key="key"
:name="tagName"
:isEdit="editState[tagName]"
@startEditingTagName="startEditingTagName"
/>
</div>
</template>
<script>
import { mapGetters } from 'vuex';
import EditTagItem from './EditTagItem.vue';
export default {
name: 'EditTagList',
components: { EditTagItem },
data: () => ({
editState: {},
}),
computed: {
...mapGetters('tags', ['tagsAsArray']),
},
methods: {
startEditingTagName(tagName) {
this.editState[tagName] = true;
},
},
created() {
this.tagsAsArray.forEach((item) => {
this.editState[item] = false;
});
},
};
</script>
Элемент списка (лишнее убрано):
<template>
<div class="edit-tag-item d-flex clearfix">
<template v-if="isEdit">
<input class="mr-auto"/>
<b-icon class="edit-tag-icon edit-tag-icon-edit" icon="check2-square" variant="success"b-icon>
</template>
<template v-else>
<span class="edit-tag-name mr-auto">{{ name }}</span>
<b-icon class="edit-tag-icon edit-tag-icon-edit" icon="pencil-square" variant="primary" @onClick="editTagName"></b-icon>
</template>
</div>
</template>
<script>
export default {
name: 'EditTagItem',
components: {
clickableWrapper,
},
props: {
name: String,
isEdit: Boolean,
},
methods: {
editTagName() {
this.$emit('startEditingTagName', this.name);
},
},
};
</script>