как присвоить данные в компоненте vue.js

78
05 марта 2022, 09:50

у меня есть 2 компонента, мне необходимо чтобы при срабатывание события в компоненте "А" данные присваивались в форму компонента "B",

Я использую vuex

компонент "A"

<ul class="article-list">
  <li class="article__item" v-for="(item, index) in postsMin" :key="index">
    <article-item @click.native="pushEditData(item)" :options="item"></article-item>
  </li>
</ul>

js компонента "А"

export default {
  methods: {
    pushEditData (data) {
      this.$store.dispatch('UPDATE', data)
    }
  },
}

store

export default {
  state: {
    update: {
      title: '',
      discription: '',
      author: '',
      like: '',
      dateCreate: '',
      dateUpdate: ''
    }
  },
  mutations: {
    setUpdate: (state, payload) => {
      state.update = {
        title: payload.title,
        discription: payload.discription,
        author: payload.author,
        like: payload.like,
        dateCreate: payload.dateCreate,
        dateUpdate: payload.dateUpdate
      }
    }
  },
  actions: {
    UPDATE: ({ commit }, payload) => {
      commit('setUpdate', payload)
    }
  },
  getters: {
    getUpdate: state => state.update
  }
}

компонент "B"

  <form>
    <b-field label="Заголовок">
      <b-input class="title" v-model="title"></b-input>
    </b-field>
    <b-field label="Содержимое статьи">
      <b-input type="textarea" v-model="update.discription"></b-input>
    </b-field>
    <div class="buttons edit__button">
      <b-button @click="update">Применить</b-button>
    </div>
  </form>

js компонента "B"

export default {
  props: [
    'options'
  ],
  data () {
    return {
      title: this.update()
    }
  },
  methods: {
    update () {
      this.$store.dispatch('UPDATE', {
       title: this.title
      })
    }
  }
  computed: {
    update () {
      return this.$store.getters.getUpdate.title
    }
  }
}
Answer 1

Как вариант Вы можете использовать в своих компонента мапинг вашего хранилища. т.е. внутри компонента Б сделать такую конструкцию:

computed: {
  ...mapState([
    'update'
  ])
}

и просто через v-model отображать данные в компоненте Б сразу из хранилища. В компоненте А просто через action отправляете данные в vuex по стандартной схеме. Подробнее об этой механике описаны здесь https://vuex.vuejs.org/ru/guide/state.html ближе к концу страницы. v-model прямую в хранилище также позволит вам сохранять обновленные данные в компоненте Б без лишнего кода.

Если у вас в update будет содержаться не только одна форма, вы также можете осуществлять поиск и фильтрование данных из массива прямо в компоненте Б и также эффективно работать с v-model.

READ ALSO
Как реализовать кастомный ListView?

Как реализовать кастомный ListView?

Мне нужно сделать точно такое же вью как на скриншоте отмечено красной линией

131
Как передать List&lt;класс&gt; через аргументы

Как передать List<класс> через аргументы

Есть класс в котором собираю данные и записываю их в файл

99
Как через исключения получить имя метода и класса

Как через исключения получить имя метода и класса

Как при возникновении исключения получить имя метода и класса в котором оно вызвано?

101