Я пытаюсь понять, как лучше всего делать что-то во Vue, и немного застреваю, когда дело доходит до использования данных, которые не были загружены.
Я нахожусь в процессе создания представления «показать» для ресурса, который загружается через vue-apollo, а форма состоит из двух компонентов: компонента формы и компонента редактирования (форма используется совместно с новыми и редактируемыми ).
Моя форма выглядит примерно так
<template lang = "pug">
form
input(v-model='model.name')
input(v-model='model.description')
</template>
<script>
import clone from 'ramda';
export default {
data() {
return {
model: clone(this.value),
};
},
};
</script>
И такой компонент "редактирования"
<template lang = "pug">
resource-form(v-model='resource')
</template>
<script>
import gql from 'graphql-tag';
export default {
apollo: {
resource() {
return gql'{
resource(id: ${this.$route.params.id}) {
name
description
}
}';
}
}
data() {
return {
model: clone(this.value),
};
},
};
</script>
Когда страница загружается, я получаю кучу ошибок о том, что не могу прочитать свойства 'name' и 'description' undefined, что имеет смысл, учитывая, что resource не установлен при начальной загрузке страницы, но каков наилучший способ обработки это?
Должен быть более чистый способ справиться с этим, чем постоянная проверка, является ли model нулевым.
Почему бы не использовать Компонент ApolloQuery? Дело в том, что он встроен в библиотеку, которую вы, кажется, используете. Вы можете использовать ApolloQuery и шаблоны с заданной областью, чтобы отображать дочерние компоненты только тогда, когда у вас действительно есть данные.
откуда берется this.value?
@ zero298 это единственный вариант, но я надеялся, что есть способ сделать это лучше, но если нет, то я думаю, что это нужно сделать
@Bert Выглядит идеально, хотя у меня проблема. Похоже, привязка v-model = "data.resource" не работает, ошибки по-прежнему возникают
@Daniel, извините, я не показал в коде, но есть опора value, которая устанавливается с использованием v-модели
@Bert был глупым, он работает нормально. Но мне также нужно вывести данные из слота для этого компонента, поэтому в итоге я обернул их в v-if





Как насчет упаковки вашего
inputвspan(v-if = "model"), чтобы они не пытались использовать значение, если толькоmodelне является неопределенным?