這是我創建的依賴於jQuery的解決方案(更糟的是,EVAL!):
angular.module('app', [])
.directive('displayFormat', function() {
return function (scope, element, attr) {
$(element).focus(function() {
$(this).val(eval('scope.' + $(this).attr('ng-model')));
});
$(element).blur(function() {
var modelValue = parseFloat(eval('scope.' + $(this).attr('ng-model')));
if (attr["displayFormat"] == 'currency') $(this).val('$' + modelValue.numberFormat(2));
if (attr["displayFormat"] == 'percentage') $(this).val((modelValue * 100) + '%');
});
};
});
Number.prototype.numberFormat = function (decimals, dec_point, thousands_sep) {
dec_point = typeof dec_point !== 'undefined' ? dec_point : '.';
thousands_sep = typeof thousands_sep !== 'undefined' ? thousands_sep : ',';
var parts = this.toFixed(decimals).toString().split('.');
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, thousands_sep);
return parts.join(dec_point);
}
然後在控制器:
$scope.$watch(function() {
$('input').not(':focus').blur();
});
然後輸入字段:
<input type="text" ng-model="myVariable" display-format="currency">
(在我的實際應用中,除了貨幣外,我還將實施其他顯示格式選項)
雖然我真的很想擁有一個非jQuery解決方案。
我在研究這個問題時看到了這些,但我不清楚如何使用它們來改變顯示值,同時保持myVariable的值不變。 – AlliterativeAlice
不,你不能在處理模型時檢查是否有$ –