#api #vue.js #response
#API #vue.js #ответ
Вопрос:
Вот мой сценарий, я пытаюсь использовать идентификатор, полученный из одного ответа API, в другом API :
Ниже приведен Component.vue:
<template>
<div class="Contents">
<div class="vx-col" v-for="idea in ideas" v-bind:key="idea.id">
<vx-card>
...
<div>
{{idea.name}} of {{idea.id}}
</div>
<div v-if="sum">
{{sum.total}}
</div>
...
</vx-card>
</div>
</div>
</template>
<script>
...
async created () {
await this.$http.get('/ideas')
.then((response) => { this.ideas = response.data })
.catch((error) => { console.log(error) })
},
methods: {
getSumOfIdeas(id){
this.$http.get('/sum_of_ideas/' id '/everything')
.then((response) => { this.sum = response.data })
.catch((error) => {console.log(error)})
}
},
mounted (){
this.getSumOfIdeas(this.ideas.id) //Here i am trying to give that id coming from the /ideas
}
</script>
Вот что console.log(response.data) дает в /ideas:
Не знаю, где я ошибаюсь, в настоящее время в моей консоли я получаю сообщение об ошибке как :
/sum_of_ideas/undefined/everything // so here id coming from the /ideas should have been rendered.
Чтобы было понятно, я использовал пример {{idea.id }} и это отображает только число каждый раз, когда оно повторяется.
Пожалуйста, помогите мне в этом, я хочу использовать ответ, поступающий из /ideas ie id в другом ответе, вот он /sum-of-ideas .
Ответ №1:
Когда вы вызываете this.getSumOfIdeas(this.ideas.id)
, вы пытаетесь получить доступ id
ideas
к тому, чего не существует. Либо используйте что-то вроде this.getSumOfIdeas(this.ideas[0].id)
доступа id
к первому объекту, либо используйте цикл для перебора идей и вызова this.getSumOfIdeas(this.ideas.id)
.
this.ideas.forEach(idea => this.getSumOfIdeas(idea.id))
Комментарии:
1. Это работает, но при загрузке страницы значение быстро меняется, я имею в виду циклы, и каждый раздел получает одно и то же значение метода getSumOfIdea. Итак, не могли бы вы сказать мне, где именно его разместить, чтобы каждый раздел получал свое собственное значение при повторении.
2. Где вы разместили его в настоящее время, ваш вопрос содержит обновленный код, который вы используете?
3. Я обновил свой код, пожалуйста, проверьте, я показываю карты, каждая карта должна отображать разную информацию, каждая карта на самом деле отображает разные ideas.name и idea.id но одна и та же сумма на всех картах. Я попробовал ответ, который вы мне сказали, и он сначала меняет значение, а затем привязывается к единице во всех карточках
4. Можете ли вы добавить скриншот ответа от
/sum_of_ideas
api?5. Предположим, если я использую /sum_of_ideas/3/все, что возвращает объект: { total: 200, max: 100, min: 49, ideas_in_month: 50, ideas_in_year: 60} , здесь вы можете видеть, что у меня жестко запрограммировано 3, но я хочу использовать идентификатор, поступающий из /ideas API для того, чтобы отобразить информацию о конкретной карте.
Ответ №2:
используются оба promise и async await, используйте только любой. выполнить getSumOfIdeas
после назначения this.ideas
, которое находится в created
hook
<template>
<div class="Contents">
<div class="vx-col" v-for="idea in ideas" v-bind:key="idea.id">
...
<div>
{{idea.name}} of {{idea.id}}
</div>
<div v-if="sum">
{{sum.total}}
</div>
...
</div>
</div>
</template>
<script>
...
created () { // remove async and await
this.$http.get('/ideas')
.then((response) => {
this.ideas = response.data;
this.getSumOfIdeas(this.ideas.id); // Do this here after assigning ideas
})
.catch((error) => { console.log(error) })
},
methods: {
getSumOfIdeas(id){
this.$http.get('/sum_of_ideas/' id '/everything')
.then((response) => { this.sum = response.data })
.catch((error) => {console.log(error)})
}
},
mounted (){
// this.getSumOfIdeas(this.ideas.id) // move to created
}
</script>
Комментарии:
1. Я тоже пробовал этот способ, но то же самое я получаю /some-of-ideas/undefined/ все, скорее я ожидаю идентификатор вместо undefined.
2. @build___ обновите свой ответ с
console.log(response.data)
помощью afterthis.$http.get('/ideas')
3. Ответ /ideas — это массив, который состоит из объектов внутри него, каждый объект как идентификатор, сумма идей и так далее. Я пытаюсь отобразить имя и некоторые идеи каждого идентификатора соответственно.
4. это делается для проверки наличия
this.ideas
свойстваid
5. @build___ как массив может иметь свойство
id
? вся ваша логикаgetSumOfIdeas
неверна!