VUE指令

123 阅读1分钟

处理数字格式

注册一个自定义指令 v-setnumber

// 小数点数值处理指令
Vue.directive('setnumber', {
    bind: function(el, binding, vnode) {
        var s = JSON.stringify
        var str = `${s(binding.value)}`
        var str1 = str.trim()
        var flag = true // 最后是否添加-号
        if(str1.indexOf('-') != -1){ //负数特殊处理
            str1 = str1.slice(1)
            console.log('处理后',str1)
            flag = false
        }
        var arr = str1.split('')
        
        if (str1.indexOf('.') == -1) {
            arr.reverse()
            var num = 0
            for (var i = 0; i < arr.length; i++) {
                num++
                if (num > 3) {
                    arr.splice(i, 0, ',')
                    num = 0
                }
            }
            arr.reverse()
            var endstr = arr.join('') + '.00'
            if(flag){
                el.innerText = endstr
            }else{
                el.innerText = '-'+endstr
            }
        } else {
            var newarr = str1.split('')
            var newstr1 = newarr.reverse().join('')
            arr.reverse()
            console.log("newstr1",newstr1)
            console.log("newstr1.indexOf('.')",newstr1.indexOf('.'))
            if (newstr1.indexOf('.') == 2) {
                var num = -3
                for (var i = 0; i < arr.length; i++) {
                    num++
                    if (num > 3) {
                        arr.splice(i, 0, ',')
                        num = 0
                    }
                }
            } else {
                var num = -2
                for (var i = 0; i < arr.length; i++) {
                    num++
                    if (num > 3) {
                        arr.splice(i, 0, ',')
                        num = 0
                    }
                }
                arr.unshift('0')
            }
            arr.reverse()
            var endstr = arr.join('')
            // 插入处理好的数字
            if(flag){
                el.innerText = endstr
            }else{
                el.innerText = '-'+endstr
            }
            
        }

    }

})

HTML

<script src="https://cdn.jsdelivr.net/npm/vue@2.6.12"></script>
<script src="./number.js"></script>
  <div id="app">
      <div v-setnumber="number"></div>
  </div>
   <script>
      new Vue({
        el: '#app',
        data: {
          number: 1028
        }
      })
   </script>

页面显示: 1,028.00