Can Vue.js add commas while user typing numbers?

2019-06-03 07:42发布

I see this topic, But this is Jquery, How can I change it to Vue.js ? Is v-on supported in Vue.js Where is my mistake. Sorry for my terrible English.

<div id="vue">
    <input v-model="amountModel" v-on:keyup="AddCammas()" value="{{price}}">
</div>

<script>
   el: #vue,
   methods:{
      AddCammas : funtion(){
          if(event.which >= 37 && event.which <= 40) return;

          $(this).val(function(index, value) {
             this.message = this.amountModel
                .replace(/\D/g, "")
                .replace(/\B(?=(\d{3})+(?!\d))/g, ",");
           });
      } 
   }   
</script>

2条回答
再贱就再见
2楼-- · 2019-06-03 07:58

To people who are looking for doing mask for multiple fields then it's kinda pain to use watch, so may we can use v-money (docs included). And check the demo here.

查看更多
淡お忘
3楼-- · 2019-06-03 07:59

You don't need jQuery at all for this. You watch your variable, and in the watch function, compute the reformatted version, then set it back to your variable using nextTick (so it's not mutating before the watch is complete).

new Vue({
  el: '#vue',
  data: {
    price: 0
  },
  watch: {
    price: function(newValue) {
      const result = newValue.replace(/\D/g, "")
        .replace(/\B(?=(\d{3})+(?!\d))/g, ",");
      Vue.nextTick(() => this.price = result);
    }
  }
});
<script src="//cdnjs.cloudflare.com/ajax/libs/vue/1.0.28/vue.min.js"></script>
<div id="vue">
  <input type="text" v-model="price" />{{price}}
</div>

查看更多
登录 后发表回答