@kirill-93

Как подставлять данные из аякс во Vue?

Есть страница с формой для фидбека. Пользователь должен ввести свой мейл и сообщение. По умолчанию нужно подставить мейл адрес, который использовался при регистрации, но пользователь должен иметь возможность его изменить.
<form>
<input type="text" v-model="email">
<textarea v-model="message"></textarea>
</form>

Чтобы подставить мейл пользователя, нужно дождаться, пока выполнится запрос (аякс запрос, который сохраняется информацию о пользователе в $store.state.user) и придут данные о нем.

Как мне сделать, чтобы когда данные пришли, они подставились, но пользователь мог их менять?
Работающий вариант у меня получился такой:
<script>
...
data() {
    return {
        message: '',
        email: '',
    }
},
watch {
    '$store.state.user': function() {
        this.email = this.$store.state.email;
    }
},
...
</script>

Но он мне не нравится. Хотя может он и верный. Скажите, если это так.

Я пробовал использовать computed вот так:
<script>
...
data() {
    return {
        message: ''
    }
},
computed() {
    email() {
        return this.$store.state.user.email;
    }
},
...
</script>

Но тогда, если пользователь руками поменяет этот адрес, он все равно останется прежним и на сервер уйдет значение из $store.

Как правильно сделать?
  • Вопрос задан
  • 131 просмотр
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Vue.js
пробовал использовать computed <...> если пользователь руками поменяет этот адрес, он все равно останется прежним

Добавьте сеттер:

email() {
  get() {
    return this.$store.state.user.email;
  },
  set(val) {
    // тут вызов мутации, которая поменяет значение в хранилище
  },
},
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы