Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在angularJS中为数字添加千个分隔逗号?_Angularjs_Number Formatting - Fatal编程技术网

如何在angularJS中为数字添加千个分隔逗号?

如何在angularJS中为数字添加千个分隔逗号?,angularjs,number-formatting,Angularjs,Number Formatting,我只想将一个数字字符串转换成一个数字,该数字将使用千个分隔的逗号显示 var value = "123456"; 我想在网格中显示“123465”。 我已经看了一些关于这个的文档,但是所有的内容都是关于用HTML显示它。 我想在动态网格中显示它 function numberRenderer (params) { return new Number (params.value); } 我想格式化数字,以便将其转换为字符串

我只想将一个数字字符串转换成一个数字,该数字将使用千个分隔的逗号显示

var value = "123456";
我想在网格中显示“123465”。 我已经看了一些关于这个的文档,但是所有的内容都是关于用HTML显示它。 我想在动态网格中显示它

function numberRenderer (params) {
                    return new Number (params.value);
                }
我想格式化数字,以便将其转换为字符串显示。

使用过滤器

HTML用法

{{ number_expression | number : fractionSize}}
$filter('number')(number, fractionSize)
Js用法

{{ number_expression | number : fractionSize}}
$filter('number')(number, fractionSize)

我很欣赏@jbrown给出的答案,但我也希望找到某种解决方案,在用户输入数字时在输入字段中添加逗号。我最终找到了这个指令,它被证明正是我所需要的

HTML


JAVASCRIPT

myApp.directive('numberInput',function($filter){
返回{
要求:'ngModel',
链接:函数(范围、元素、属性、ngModelCtrl){
ngModelCtrl.$formatters.push(函数(modelValue){
返回setDisplayNumber(modelValue,true);
});
//最好使用elem.val()而不是
//ngModelCtrl.$setViewValue,因为后者将重新触发解析器
//并且不一定按照正确的顺序,最后更改值。
//看http://radify.io/blog/understanding-ngmodelcontroller-by-example-part-1/
//了解ngModelCtrl的工作原理。
ngModelCtrl.$parsers.push(函数(viewValue){
setDisplayNumber(视图值);
返回setModelNumber(视图值);
});
//有时解析器链不会运行(当用户重复
//输入相同的非数字字符)
//对于这些情况,请在半秒钟后使用“键控”再次清理
//(解析器的运行速度比keyup快得多,所以最好在解析器中也这样做
//给人一种在键入时添加逗号的感觉)
元素绑定('keyup focus',函数(){
setDisplayNumber(elem.val());
});
函数setDisplayNumber(val,格式化程序){
var VALTR,显示值;
if(typeof val==‘未定义’){
返回0;
}
valStr=val.toString();
displayValue=valStr.replace(/,/g')。replace(/[A-Za-z]/g');
displayValue=parseFloat(displayValue);
displayValue=(!isNaN(displayValue))?displayValue.toString():“”;
//句柄前导字符-/0
if(valStr.length==1&&valStr[0]=='-'){
displayValue=valStr[0];
}else if(valStr.length==1&&valStr[0]==0'){
显示值=“”;
}否则{
displayValue=$filter('number')(displayValue);
}
//句柄十进制
如果(!attrs.integer){
if(displayValue.indexOf('.')=-1){
如果(valStr.slice(-1)='。){
显示值+=';
}else if(valStr.slice(-2)='.0'){
显示值+='.0';
}else if(valStr.slice(-3)='.00'){
显示值+='.00';
}
}//处理小数点后的最后一个字符0和另一个数字
否则{
if(valStr.slice(-1)='0'){
显示值+='0';
}
}
}
if(attrs.positive&&displayValue[0]=='-'){
displayValue=displayValue.substring(1);
}
if(格式化程序的类型!==“未定义”){
返回(displayValue=='')-0:displayValue;
}否则{
元素值((displayValue=='0')?“”:displayValue);
}
}
函数setModelNumber(val){
var modelNum=val.toString().replace(/,/g',).replace(/[A-Za-z]/g',);
modelNum=parseFloat(modelNum);
modelNum=(!isNaN(modelNum))?modelNum:0;
if(modelNum.toString().indexOf('.')!=-1){
modelNum=Math.round((modelNum+0.00001)*100)/100;
}
如果(属性正){
modelNum=Math.abs(modelNum);
}
返回modelNum;
}
}
};
});
从以下位置找到AngularJS指令:


明白了。关于fractionSize的文档也不太清楚。如果我不传递任何参数,我会得到预期的结果。fractionSize是小数点。没有设定,你得到#,####。设置为2,您将获得#、#####################等等…效果非常。但是我怎样才能把它改成2位小数呢?