嗯,
我的第一个想法是在这里分离关注点。您在一侧拥有模型mynumber
,而在另一侧拥有表示。这些与我的观点不同。
所以你可以做的是引入一个指令(我曾经在 AngularJS 1.1.5 中为日期值做过这个,所以可能需要一些额外的黑客攻击):
首先我们引入一个指令:
<input type="text" class="span2" ng-model="mynumber" number-format>
使用代码:
var app = angular.module("your.directives", ['your.filters']);
app.directive("numberFormat", [
'$filter', function(filter) {
return {
replace: false,
restrict: "A",
require: "?ngModel",
link: function(scope, element, attrs, ngModel) {
var numberFormat;
if (!ngModel) {
return;
}
ngModel.$render = function() {
return element.val(ngModel.$viewValue);
};
var numberFilter = filter('myNumberFilter');
return ngModel.$formatters.push(function(value) {
return numberFilter(value);
});
}
};
}
]);
为此,您需要一个有效的myNumberFilter
过滤器,它可以根据给定的语言(无论您如何确定)决定如何格式化输入值。
编辑:我注意到,AngularJS 有它自己的数字过滤器,所以我更改了名称。让我们添加我们自己的:
var app = angular.module("your.filters", []);
app.filter("myNumberFilter", ['SiteLanguage',
function(siteLanguage) {
return function(number) {
var language = siteLanguage.getLanguage(); //I assume you have a service that can tell you the current language
switch(language) {
case "de":
// return the variant of number for "de" here
break;
case "fr":
// return the variant of number for "fr" here
break;
default:
// return english variant here.
break;
};
}
]
});
您可能需要针对各个国家/地区的格式化程序功能(而不是盲目依赖angular locale
. 并且您可能需要一项服务,该服务SiteLanguage
将为您提供当前站点上的语言。
希望这可以帮助 :)