【发布时间】:2018-01-18 10:25:14
【问题描述】:
我不知道是什么导致了这个问题。我正在向后端发送请求以获取一些数据并将其显示在前面。我从后面获取一些食谱并将其存储在数组中。使用 v-for 我循环槽数组并创建 router-link 以导航到每个配方。现在,当我单击某个食谱时,我想在屏幕右侧显示它的详细信息。单击链接时,我从数据库中获取正确的配方并将其存储在 vuex 状态的空对象中。有了吸气剂,我想得到那个对象,但是当我得到它时,它是完全错误的 id。
VUEX 模块
const state = {
recipes: [],
singleRecipe: {}
};
const mutations = {
'RECIPES_LIST'(state, recipes) {
state.recipes = recipes;
},
'GET_RECIPE'(state, response) {
const recipe = response; // THIS IS THE RIGHT RESPONSE
state.singleRecipe = recipe;
}
}
const actions = {
initRecipes: ({commit}) => {
axios.get('http://localhost:3000/recipes')
.then((response) => {
commit('RECIPES_LIST', response)
})
.catch(err => {
console.log(err);
});
},
getRecipe: ({commit}, id) => {
axios.get('http://localhost:3000/recipes/' + id)
.then(response => {
const recipe = JSON.stringify(response);
commit('GET_RECIPE', recipe); // RIGHT RECIPE
})
.catch(err => console.log(err));
},
const getters = {
recipes: state => {
return state.recipes;
},
singleRecipe: state => {
return state.singleRecipe;
}
};
食谱列表组件
<template>
<div>
<div class="col-md-6">
<router-link :to="'/recipes/' + recipe.id" v-for="recipe in
recipes.data">
<div id="list" class="panel">
<div class="panel-body">
<div class="pull-left">
<h4>{{recipe.title}}</h4>
</div>
<div class="pull-right">
<img class="img-responsive" :src="recipe.picture" style="width: 80px; height: 80px;">
</div>
</div>
</div>
</router-link>
</div>
<div class="col-md-6">
<router-view></router-view>
</div>
</div>
</template>
<script>
export default {
computed: {
recipes() {
return this.$store.getters.recipes;
}
}
}
</script>
配方详情组件
<template>
<div class="panel" @click="getSingleRecipe">
<div class="panel-heading">
<!--<h1>{{recipe.data.title}}</h1>-->
</div>
<div class="panel-body">
<!--<p>{{recipe.data.description}}</p>-->
<p>Ingredients: </p>
<ul>
<li v-for="i in recipe.ingredients">{{i.ingredient}}</li>
</ul>
<router-link :to="{name: 'Update', params: {id: id}}"><button class="btn btn-primary">Update Recipe</button></router-link>
<button class="btn btn-danger" @click="deleteRecipe">Delete Recipe</button>
</div>
</div>
</template>
<script>
import { mapActions } from 'vuex';
export default {
data() {
return {
id: this.$route.params.id,
recipe: {}
}
},
watch: {
'$route' (to, from) {
this.id = to.params.id;
this.getSingleRecipe();
console.log('CHANGEEEEEE' + this.recipe); // GETS RECIPE WITH ID (example 4)
console.log("ACTIVEEEEEEE ID" + this.id); // GETS RIGHT ID (example id: 2)
}
},
...mapActions({
deleteTheRecipe: 'deleteRecipe',
initRecipes: 'initRecipes',
getRecipe: 'getRecipe'
}),
deleteRecipe() {
this.deleteTheRecipe(this.id);
this.initRecipes();
this.$router.push('/recipes');
},
getSingleRecipe() {
this.getRecipe(this.id);
this.recipe = this.$store.getters.singleRecipe;
}
},
created() {
this.getSingleRecipe();
console.log("CREATED ID" + this.id);
console.log('CREATEDDDDD ' + JSON.stringify(this.recipe));
}
}
</script>
【问题讨论】:
标签: javascript vue.js axios vuex