Я использую в своем проекте vuejs и vue-apollo.
У меня есть компоненты: GroupList
и GroupForm
Дело в том, что я сначала попадаю в список, а затем, когда я нажимаю на одну из групп, я попадаю в представление формы этой группы. Для этого у меня есть кнопка, которая открывает представление формы, задавая id
этой группы:
openGroupFormView (group, index) {
this.$router.push({ name: 'GroupFormView', params: { groupId: group.id } })
}
Раньше я передавал объект группы как параметр, и это работало, но я передумал, и теперь я хочу передать id
, чтобы при открытии компонента GroupForm
запрос graphql для извлечения этой группы на основе id
выполнялся выполнен. Я хочу сделать это, чтобы избежать несоответствий apollo-cache в случае, если кто-то тем временем редактировал ту же группу.
Итак, в моем 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 ():
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>