@danilr

Как подставить значение в input при получении запроса?

При нажатии на кнопку - происходит action c мутациями и открывается компонент, проблема в том, что если я не использую вычисляемое свойство для установки получаемого значения, то у меня не успевает подгружаться значение из vuex и поэтому значение не устанавливается. А если использую вычисляемое свойство, то он не дает установить пустое значение в input.

Это обработчик ввода в input:

methods: {
    handleUserName(value){
      this.userFormData.name = value
    }
  },

Тут пытаюсь присваивать в маунтед (не всегда успевает за 0.5с, надо 100% вариант):

mounted() {
    setTimeout(()=>{
     if(this.user){
      this.userFormData.name = this.$store.state.administration.user.name
      } 
    },500)

Так пытался получать из вычисляемого свойства (не давал менять его - все время сбрасывал):

computed: {
    userName(){
      if(this.user) return this.user.name
      else return
    }
}

Вот в шаблоне так сейчас:

<InputText
              :value="userFormData.name"
              :placeholder="'Введите имя'"
              :labelText="'Имя'"
              :type="'text'"
              @input="handleUserName($event)"
            ></InputText>

Тут запрос к API, который вызывается при вызове попапа:

getUsersEdit(context) {
      HTTP.post(Routes.getEditUserForm, {
        // 'id': userId
        'id': context.state.currentUserId
      })
        .then(({ data }) => {
          context.commit('getUser', data.user)
          console.log('data.user: ', data.user);
        })
        .catch(error => {
          console.error(error);
        })
    }
5c8bda343d48a212693331.png
  • Вопрос задан
  • 307 просмотров
Решения вопроса 1
potapchino
@potapchino
привязывайте модель инпута к vuex:
<InputText
  :value="userName"
  @input="handleUserName($event)">
</InputText>


computed: {
  userName: {
    get() {
      return this.$store.state.administration.user.name
    },
    set(value) {
      this.$store.commit('setUserName', value)
    }
  }
},
methods: {
  handleUserName(value){
    this.userName = value
  }
}

в этом случае, после открытие попапа, имя появится сразу после того, как данные придут с апи.

или вы можете открыть попап только посе того как данные придут с апи:
methods: {
  openPopup() {
    this.$store.dispatch('loadUser')
      .then(() => {
        this.popupOpen = true
      })
  }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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