Как мне создать компонент формы динамического редактора в Vue

#javascript #vue.js #vuetify.js

#javascript #vue.js #vuetify.js

Вопрос:

Я новичок в Vue.js . Я создаю приложение, в котором использую Vuetify и nuxt, и хочу иметь модальный редактор многократного использования. До сих пор я выяснял, что могу использовать v-dialog. У меня есть список домашних животных, и я хочу, чтобы редактор для этого питомца появлялся при нажатии на ссылку Редактировать действие в каждой строке. Редактор должен загрузить объект pet из серверной части и представить форму редактора. При нажатии кнопки Сохранить в модальном режиме питомец должен быть сохранен, а родитель уведомлен, чтобы он мог обновить список. Я хочу иметь возможность добавлять домашних животных на другую страницу (скажем, на странице пользователей я хочу иметь возможность выбирать существующих домашних животных, а также регистрировать нового питомца), используя тот же редактор.

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

Ответ №1:

Почему бы не использовать props для входного сигнала и emit event для выходного сигнала?

В приведенном ниже примере компонент редактора реагирует на petId , и вы можете закрыть диалоговое окно, установив petId значение null

В EditorDialog.vue :

 <template>
  <v-dialog :value="petId !== null">
    <!-- You editor -->
    <v-button @click="onSave">Save</v-button>
  </v-dialog>
</template>

<script>
export default {
  props: {
    petId: {
      type: String,
      default: '' // '' means create new pet
    }
  },
  watch: {
    petId: {
      immediate: true,
      handler(petId) {
        if (petId === null) return
        // fetch data or create empty data
      }
    }
  }
  methods: {
    onSave(): {
      const data = xx // your logic here
      this.$emit('save', data)
    }
  }
}
</script>
  

И в родительском:

 <EditorDialog pet-id="blah" @save="handler" />
  

Вы можете установить pet-id initial в null , и диалоговое окно не будет отображаться как открытое на стороне сервера. Кроме того, вы можете удалить immediate: true , если начальное значение всегда null

Комментарии:

1. Это выглядит очень красиво.