Я использую vuejs и vue -apollo в моем проекте.
У меня есть компоненты: GroupList
и GroupForm
Дело в том, что я первый прибыть в список, а затем, когда я нажму на одну из групп, я приду в виде этой группы. Для этого у меня есть кнопка, которая открывает представление формы, давая id
этой группы:
openGroupFormView (group, index) {
this.$router.push({ name: 'GroupFormView', params: { groupId: group.id } })
}
В прошлом я использовал для передачи объекта группы в качестве параметра, и это работало, но я передумал, и теперь я хочу передать id
, чтобы при открытии компонента GroupForm
выполнялся запрос graphql для извлечения этой группы на основе id
. Я хочу сделать это для того, чтобы избежать несоответствий в кэше apollo в случае, если кто-то за это время редактировал одну и ту же группу.
Итак, в моем GroupForm
компоненте у меня есть:
Моя опора:
props: {
groupId: Number
}
Мой запрос компонента:
apollo: {
group: {
query: GROUP_QUERY,
variables () {
return {
id: this.groupId
}
},
..
}
Соответствующий запрос под этим:
const GROUP_QUERY = gql`
query ($id: ID) {
group (id: $id) {
id
name
usersCount
userIds {
id
username
}
}
}
`
Моя проблема в том, что в data ()
моего компонента я использовал группу, которую прошел через реквизиты, в качестве объекта. Теперь я все еще хочу что-то сделать в группе, но часть apollo
выполняется после части data ()
, поэтому у меня возникла неопределенная проблема. Как я могу гарантировать, что эта проблема не возникает? Я имею в виду, что сначала выполняется запрос apollo.
Блок моих данных ():
data () {
return {
form: {
name: this.group === undefined ? '' : this.group.name
}
}
},
Заранее благодарен за помощь!
РЕДАКТИРОВАТЬ: часть моего шаблона
<b-form>
<b-form-group label="Name">
<b-form-input
type="text"
v-model="form.name"
required
:disabled="!editing"/>
</b-form-group>
<div v-if="editing" class="mb-3">
<b-button @click="cancelEdit()">Cancel</b-button>
<b-button @click="group === undefined ? createGroup() : updateGroup(group)" variant="success">Save</b-button>
</div>
</b-form>