Как перенаправить данные на новую страницу для заполнения формы с помощью Vue и Vuetify?

#vue.js #vuetify.js

Вопрос:

Я ищу решение для функции, которую мне нужно реализовать в своем проекте. У меня есть таблица данных с определенным количеством элементов, где в одном из столбцов есть несколько кнопок действий. Одна из кнопок-это кнопка редактирования. Что мне нужно, так это перенаправить страницу на определенный маршрут, например «/редактировать», после нажатия кнопки, где появится форма с некоторыми полями, которые необходимо заполнить данными из выбранного элемента в таблице.

На данный момент у меня есть следующее:

Страница с таблицей данных

 <template>
  <v-container>
    <v-card>
      <v-data-table :headers="headers" :items="navQuestoes">
        <template v-slot:[`item.actions`]="{ item }">
          <router-link to="/edit">
            <v-icon small class="mr-2">mdi-pencil</v-icon>
          </router-link>
        </template>
      </v-data-table>
    <v-card>
  <v-container>
<template>

<script>
import axios from 'axios'
export default {
    data(){
        return{
            headers: [
                { text: "Identificador", sortable: false, value: "id"},
                { text: "Domínio",  sortable: false, value: "domain"},
                { text: "Opções", sortable: false, value: "actions"},
            ],
            navQuestoes: [],
        }
    },
    created(){
        axios.get(`http://localhost:8001/question`)
          .then((response)=>{
            this.navQuestoes=response.data
            console.log(this.navQuestoes);
          },(error) =>{
              console.log(error);
          });
    },
}
</script>
 

Следующий код предназначен для компонента с формой, поля которой мне нужно заполнить данными, поступающими с первой страницы с таблицей данных.

 <template>
  <v-form v-model="valid">
    <v-container>
          <v-text-field v-model="formData.id" label="Identificador"/>

          <v-text-field v-model="formData.domain" label="Domínio"/>
    </v-container>
  </v-form>
</template>


<script>
  export default {
    data() {    
      return{
        valid: false,
        formData:{
            id: '',
            domain: '',
          },
      }  
    }   
  }
</script>
 

Я начал использовать <router-link> , который, очевидно, перенаправляет на страницу всякий раз, когда нажимается значок, и теперь я думал об использовании $emit для отправки данных на другую страницу. Является ли это хорошим решением? Как бы я это реализовал сейчас? Просто для уточнения, отправляемые данные соответствуют элементу в массиве «navQuestoes», который соответствует элементу в строке таблицы, где был нажат значок. Используемые структуры данных должны быть такими, как показано на рисунке, потому что на них уже основано гораздо больше кода.

Ответ №1:

Есть 2 способа сделать это:

Во-первых, это использовать Vuex для управления массивом, основанным на глобальном состоянии. Во-вторых, это использовать VueRouter, как:

 const router = new VueRouter({
  routes: [
    {
      path: '/ComponentWhichReceivesData/:id/:domain',
      components: {
        default: ComponentWhichReceivesData,
      },
      props: {
        // object mode, but it can be function mode
        default: { id: 1, domain: "example"},

      }
    }
  ]
})
 

Я бы рекомендовал вам использовать способ VueX, потому что у вас будет больше контроля над данными.