【发布时间】:2019-05-07 21:58:25
【问题描述】:
我从 mount() webhook 中的 REST api 的 axios 调用中得到了很好的响应,我知道如何正确地做到这一点:
const vm = new Vue({
el: '#flashcard-app',
data: {
card : cards[index],
cards: cards,
},
mounted() {
axios.get(url).then(response => {
this.cards = response.data
});
},
当我尝试像这样简单地输出我的卡片集合时:{{cards}} 它显示得很好,以一种很好的 JSON 正确方式。
但是
当我尝试以如下特定方式显示此集合时,它在控制台中崩溃并说它是 undefiend
<li v-on:click="toggleCard(card)" id="list">
<transition name="flip">
<p class="card" v-if="!card.flipped" key="question">
{{card.question}}
</p>
<p class="card" v-else key="answer">
{{card.answer}}
</p>
</transition>
</li>
</ul>
<div v-if="card.flipped">
<button class="button-card btn btn-success" id="remember" v-on:click="next()">Remember</button>
<button class="button-card btn btn-danger" id="don't" v-on:click="next()">Don't Remember</button>
<button class="button-card btn btn-warning" id="!sure" v-on:click="next()">Not Sure</button>
</div>
问题是,当我尝试用硬编码的 const 集合做同样的事情时,它工作得很好!
我认为它以某种方式与生命周期有关,但我已经尝试过 beforeCreate() 和 created() 并且它似乎根本不起作用(
我能否以某种方式在 vue 组件之外获得对 const 的 axios 响应?
【问题讨论】:
-
是否定义了
card?你从哪里得到你的index? -
@ssc-hrep3, index 是一个外部变量,定义如下: let index = 0;在同一个文件中。我不确定我的辩护是否正确,你能提供一些变体吗?
-
它应该像这样工作,但最好的做法是在 Vue 组件的数据部分中有一个索引变量。然后可以从
cards和index派生当前选定的项目,并带有computed property。但是,代码可能不起作用的原因是它的执行顺序:您在远程加载卡片后在回调中设置cards。但是,card的值是在组件初始化期间设置的。您需要重构它(使用计算属性)。您还可以访问数据中没有this的卡片 -
能否给我一个重构代码的例子?
标签: javascript vue.js axios constants reactive