#javascript #vue.js #vuejs2 #vue-component
#javascript #vue.js #vuejs2 #vue-компонент
Вопрос:
Я пытаюсь передать значение вычисляемого метода, которое изменяется, в мой дочерний компонент, но без особого успеха. Я создаю компонент button, который имеет несколько разных состояний сохранения, но моя кнопка всегда застревает на одном и не обновляется с родительским.
Родитель
computed: {
isSaving() {
return (
this.$_.values(this.$store.getters["CommonSettings/saving"]).filter(
status => status amp;amp; status != "done"
).length > 0
);
}
<SaveButton v-bind:saveState="isSaving"/>
Дочерний компонент
<script>
export default {
name: "saveButton",
props: ['saveState']
}
</script>
<template>
<div class="settings--button-wrapper">
<button class="btn btn--small" type="button" @click="submit()" v-if="!saveState">
<svg v-if="!saveState">
<use xlink:href="/img/sprite.svg#transparent-tick" />
</svg>
<span v-if="!saveState">Save changes</span>
</button>
<spinner v-if="saveState" class="settings--spinner">
<span>Saving...</span>
</spinner>
</div>
</template>
Когда я помещаю свой шаблон компонента SaveButton непосредственно в родительский, он работает отлично. Когда я извлекаю его в его собственный компонент, как описано выше, он застревает на «Сохранение …» и не меняется.
Когда я пытаюсь выполнить приведенное ниже в родительском:-
<template>
<div>
<div class="settings--button-wrapper">
<button class="btn btn--small" type="button" @click="submit()" v-if="!saveState">
<svg v-if="!saveState">
<use xlink:href="/img/sprite.svg#transparent-tick" />
</svg>
<span v-if="!saveState">Save changes</span>
</button>
<spinner v-if="saveState" class="settings--spinner">
<span>Saving...</span>
</spinner>
</div>
<SaveButton v-bind:saveState="isSaving"/>
</div>
</template>
..компонент кнопки также влияет на исходный код кнопки над ним — так что оба они сломаны. Когда я удаляю компонент SaveButton, исходный код снова работает.
Когда я проверяю вышеизложенное в моем инспекторе Vue, isSaving
переменная застревает на true. Я думаю, что это, возможно, исходное значение при запуске, но я не уверен, как оно так застревает. Каким-то образом мой дочерний компонент, похоже, влияет на значение родительского вычисляемого свойства isSaving, поскольку оно застревает при true
загрузке страницы.
Комментарии:
1. в последнем фрагменте кода <template> может иметь только 1 прямого дочернего элемента, поэтому, мягко говоря, поместите свою кнопку сохранения внутри div.
2. @curveball — это была ошибка копирования / вставки — извините. Исправил это сейчас — это не причина моей проблемы.
3. Я думаю, нам нужен воспроизводимый пример. Возможно, отсутствуют импортные данные и т. Д. Не могли бы вы извлечь рассматриваемый код и сделать его примером песочницы? PS. Где он всегда застревает на true? Может быть, данные, отфильтрованные в isSaving, действительно всегда верны?
4. Просто чтобы уточнить, значение
isSaving
обновляется в вашем родительском компоненте, просто не передается вашему дочернему компоненту?5. @Hannah — я переделываю вещи в их собственные компоненты. Когда я пытаюсь поместить эту кнопку в свой собственный компонент — он больше не получает обновления от родительского компонента — он застревает на начальном значении. Когда я проверяю компоненты в своем браузере при загрузке — родительскому «isSaving» присваивается значение true, а дочернему также присваивается значение true. Когда я удаляю компонент и возвращаюсь к исходному коду, «isSaving» немедленно обновляется до false, как и должно быть. Итак, мой компонент каким-то образом влияет на значение вычисляемого свойства в родительском.