首页 > 其他分享 >vue3 整数还是显示整数,有小数的保留两位小数显示,写一个指令

vue3 整数还是显示整数,有小数的保留两位小数显示,写一个指令

时间:2023-05-31 14:35:47浏览次数:39  
标签:parsedValue value directives 整数 vue3 import 小数

1、新建number-format.ts

import { Directive, DirectiveBinding } from "vue";
const numberFormat: Directive = {   mounted(el, binding: DirectiveBinding) {     const value = binding.value.text || "0";     const parsedValue = parseFloat(value);     if (!isNaN(parsedValue)) {       // 如果是整数,显示整数,否则显示保留n位小数的浮点数       if (Number.isInteger(parsedValue)) {         el.innerText = parsedValue.toFixed(0);       } else {         el.innerText = parsedValue.toFixed(binding.value.digit); // 保留n位小数       }     }   }, };
export default numberFormat; 2、新建index.ts // import directives import { App } from "vue"; import numberFormat from "./number-format"; import numberThousanderFormat from "./number-thousander-format";
const directivesList: any = {   // Custom directives   numberFormat,   numberThousanderFormat, };
const directives = {   install: function (app: App<Element>) {     Object.keys(directivesList).forEach((key) => {       // 注册自定义指令       app.directive(key, directivesList[key]);     });   }, };
export default directives; 3、main.ts import directives from "@/directive/index"; app.use(directives); 4、页面使用 <div                 v-number-format="{                   text: ell_total_price,                   digit: 2,                 }"               >                 {{ sell_total_price }}               </div>  

其中,自定义指令 numberFormat 的实现方式为:

  1. 首先,从指令的参数 binding 中获取要处理的数据 value
  2. 然后,将 value 转换为浮点数 parsedValue
  3. 如果 parsedValue 是一个合法的数值类型,根据其是否为整数来选择显示方式。
    • 如果是整数,使用 toFixed(0) 方法来保留 0 位小数,即显示整数。
    • 如果不是整数,使用 toFixed(2) 方法来保留 2 位小数,即显示带两位小数的浮点数。
  4. 最后,将处理后的结果显示在元素上。

在上面的代码中,我们在 Vue 的模板中使用 v-number-format 指令来对数字进行格式化。如果指令的参数是数字类型,指令会根据数据类型,将其显示为整数或带两位小数的浮点数;如果参数不是数字类型,则不会对该元素进行处理。

 

标签:parsedValue,value,directives,整数,vue3,import,小数
From: https://www.cnblogs.com/gaosj20210301/p/17445998.html

相关文章

  • vue3 整数还是显示整数,有小数的保留两位小数显示,并显示千分符,写一个指令
    1、新建number-thousander-format.tsimport{Directive,DirectiveBinding}from"vue";constnumberThousanderFormat:Directive={ mounted(el,binding:DirectiveBinding){  constvalue=binding.value.text||"0";  constparsedV......
  • 1439. 有序矩阵中的第 k 个最小数组和
    给你一个m *n的矩阵mat,以及一个整数k,矩阵中的每一行都以非递减的顺序排列。你可以从每一行中选出1个元素形成一个数组。返回所有可能数组中的第k个最小数组和。来源:力扣(LeetCode)链接:https://leetcode.cn/problems/find-the-kth-smallest-sum-of-a-matrix-with-so......
  • 06Vue3-Pinia
    PiniaPinia是西班牙语piña(西班牙语中的“菠萝”)单词的形似。它是一个状态管理的库,用于跨组件、页面进行状态共享(这点和Vuex、Redux一样),同时兼容Vue2、Vue3,也并不要求你使用CompositionAPI;Pinia开始于大概2019年,最初是作为一个实验,目的为了探索Vuex的下一次迭代会是什么样......
  • 记录--Vue3自定义一个Hooks,实现一键换肤
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助核心使用CSS变量,准备两套CSS颜色,一套是在light模式下的颜色,一套是在dark模式下的颜色dark模式下的CSS权重要比light模式下的权重高,不然当我们给html添加自定义属性[data-theme='dark']的时候,dark......
  • JeecgBoot—Vue3
    https://gitee.com/jeecg/jeecgboot-vue3?_from=gitee_search JeecgBoot—Vue3版前端源码,采用Vue3.0+TypeScript+Vite+Ant-Design-Vue等新技术方案,包括二次封装组件、utils、hooks、动态菜单、权限校验、按钮级别权限控制等功能。是JeecgBoot低代码平台的vue3技术栈的全新UI版......
  • 前端之vue3的setup和setup的2个的形参、响应式页面
    setupsetup是个函数,包含数据、方法等,是组合api的“舞台”。setup返回值:1.对象,其中的属性、方法都可以在模板中直接使用2.渲染含数(了解就好)exportdefault{name:"App",components:{},setup(){//非响应式变量letname="欧西里斯";letage=18;......
  • 黑马Vue3 + ElementPlus + Pinia 小兔鲜电商项目2023版
    黑马Vue3+ElementPlus+Pinia小兔鲜电商项目2023版download:3w51xuebccomElementPlus:优雅高效的Vue组件库随着Vue.js在前端开发中的广泛应用,越来越多的UI组件库涌现出来。而其中一款备受瞩目的组件库就是ElementPlus。作为一款基于Vue3.0的组件库,ElementPlus不仅完美地继承了......
  • vue3.0路由的两种方式
    import{createRouter,createWebHashHistory}from'vue-router'constroutes=[{path:'/',name:'index',component:()=>import('./pages/index.vue')//异步加载}]constrouter=createRouter(......
  • 2023-05-29:给你一个由 n 个正整数组成的数组 nums 你可以对数组的任意元素执行任意次
    七、设计算法,仅使用三次实数乘法即可完成复数a+bi和c+di相乘。算法需接收a、b、c和d为输入,分别生成实部ac-bd和虚部ad+bc。文心一言:可以使用如下算法来计算复数a+bi和c+di的积,且只需进行三次实数乘法:1.将a和b相乘,得到ab;2.将c和d相乘,得到cd;3.将ab+cd赋......
  • Vue3 ,html 修改滚动条样式
    /*滚动条*/body*::-webkit-scrollbar{width:5px;height:10px;}body*::-webkit-scrollbar-track{background:#fff;border-radius:2px;}body*::-webkit-scrollbar-thumb{background:rgb(205,206,206);border-radius:10px;}body*::-webk......