Ich habe a small app that lets you add, remove and edit recipes to a list of recipes.Vue Mehrzweckkomponenten?
Hinzufügen hat die Route /add
und Bearbeiten hat die Route /edit
. Ich verwende eine Komponente AddRecipe
für beide Routen.
Die Komponente verhält sich einfach etwas anders, wenn die Route 'edit'
enthält - d. H. Die Eingabefelder sind bereits mit den Werten gefüllt, die Sie bearbeiten.
Hier ist AddRecipeForm.vue
, die gemeinsam genutzte Komponente:
<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>
ich es denke sind bessere Lösungen für dieses Problem. Was ist zum Beispiel, wenn später im Projekt weitere Sichten benötigt werden, für die auch die Komponente benötigt wird? Ich kann die Route in der Komponente nicht überprüfen, wenn ich eine sauber lesbare, wiederverwendbare Komponente möchte.
Was ist Ihre bevorzugte Vorgehensweise bei Routen, die die gleiche Ansicht erfordern?