Maison  >  Questions et réponses  >  le corps du texte

javascript - Liaison bidirectionnelle V-Model de contrôle personnalisé Vue

<currency-input v-model="price"></currency-input>

Vue.component('currency-input', {
  template: '\
    <span>\
      $\
      <input\
        ref="input"\
        v-bind:value="value"\
        v-on:input="updateValue($event.target.value)"\
      >\
    </span>\
  ',
  props: ['value'],
  methods: {
    // 不是直接更新值,而是使用此方法来对输入值进行格式化和位数限制
    updateValue: function (value) {
      var formattedValue = value
        // 删除两侧的空格符
        .trim()
        // 保留 2 小数位
        .slice(0, value.indexOf('.') + 3)
      // 如果值不统一,手动覆盖以保持一致
      if (formattedValue !== value) {
        this.$refs.input.value = formattedValue
      }
      // 通过 input 事件发出数值
      this.$emit('input', Number(formattedValue))
    }
  }
})

vue入门指导里的,请问input事件是什么时候触发的,一旦触发,`this.$emit('input', Number(formattedValue))`不会导致input事件不停被触发,updateValue循环被调用吗?
为情所困为情所困2663 Il y a quelques jours759

répondre à tous(1)je répondrai

  • 世界只因有你

    世界只因有你2017-07-05 11:03:51

    L'événement oninput est un événement pris en charge par la plupart des navigateurs sauf IE. Il est déclenché lorsque la valeur change, en temps réel, c'est-à-dire qu'il sera déclenché à chaque fois qu'un caractère est ajouté ou supprimé. via js, il ne sera pas déclenché ;

    Donc, l'entrée est déclenchée lorsque le contenu de l'entrée change. Quant au this.$emit('input', Number(formattedValue)),事实上这里是发送自定义事件'input',他是用于父子组件之间的通信的,也就是说这里emit的事件并不会被组件自己捕捉,也就是不会触发这里的updateValue,你在的<currency-input v-model="price"></currency-input>这里增加一下input的监听,emit ici, il est déclenché ici, donc l'appel en boucle que vous avez mentionné ne sera pas envoyé.

    répondre
    0
  • Annulerrépondre