У меня есть a small app that lets you add, remove and edit recipes to a list of recipes.Vue многоцелевые компоненты?
У объекта есть маршрут /add
и текст редактирования есть /edit
. Я использую компонент под названием AddRecipe
для и маршрутов.
Компонент просто ведет себя несколько иначе, если маршрут содержит 'edit'
- то есть поля ввода предварительно заполнены значениями, которые вы редактируете.
Вот AddRecipeForm.vue
, общий компонент:
<template>
<div>
<form class="form">
<input v-model="recipe.name" placeholder="Recipe Name">
<textarea v-model="recipe.description" placeholder="Recipe Description..." rows="10"></textarea>
<button :disabled="nothingEntered()" @click.prevent="addRecipe">Submit</button>
</form>
</div>
</template>
<script>
export default {
name: 'AddRecipeForm',
data() {
return {
recipe: this.isEdit()
? this.$store.state.recipes[this.$route.params.id]
: {
name: '',
description: ''
}
}
},
methods: {
isEdit() {
return this.$route.path.includes('edit')
},
addRecipe() {
if (this.isEdit()) {
this.$store.dispatch('addRecipe', this.recipe)
} else {
this.$store.dispatch('addRecipe', {
id: Date.now(),
...this.recipe
})
}
this.$router.push('/')
},
nothingEntered() {
return !this.recipe.name || !this.recipe.description
}
},
}
</script>
Я имею в виду, есть лучшие решения этой проблемы. Например, что, если в проекте больше представлений, требующихся позже, которые также требуют компонента? Я не могу продолжать проверять маршрут в компоненте, если хочу хороший чистый читаемый компонент многократного использования.
Каков ваш предпочтительный способ работы с маршрутами, требующими одного и того же вида?