我正在转换我的Rails 3.2应用程序中的一些表单以使用AngularJS,以便我可以进行实时计算等。在我的rails应用程序中,我使用money-rails来处理货币。这会将所有货币字段视为由美分组成的整数。
当我通过JSON将所有信息发送到我的AngularJS模板时,这就成了问题。现在,当我想要美元和美分时,我的表格全部都是美分。
我已将转换放在我的AngularJS控制器中,所以当我从服务器获取数据时,我将它从美分转换为美元和美元。在更新之前的美分和副vesa。这是代码:
# Edit Investor
window.InvestorEditCtrl = ($scope, $routeParams, $location, Investor, Common) ->
console.log 'InvestorEditCtrl'
# Setup variable for common services(factory)
$scope.common = Common
$scope.master = {} # Initialise our main object hash
investor_id = $routeParams.investor_id # Get the ID of the investor we are editing from the URL
# Get the investor information & assign it to the scope master object
console.log 'Get JSON'
$scope.investor = new Investor.show({investor_id: investor_id}, (resource) ->
# copy the response from server response (JSON format) to the scopes master
$scope.master = angular.copy(resource)
# Convert price_cents to dollars
$scope.investor.price_cents /= 100
)
# Update the investor passing the JSON back to the server.
$scope.update = (investor) ->
# Convert price_cents to cents
investor.price_cents *= 100
$scope.master = angular.copy(investor)
investor.$update({investor_id: investor_id}, (t) ->
$location.path('/investors/' + t.id)
)
有更好的方法吗?
答案 0 :(得分:1)
您可以编写过滤器或指令,将其转换为HTML中所需的表单。过滤器看起来像这样:
app.filter('centsToDollars', function() {
return function(input) {
var out = input / 100;
return out;
}
});
然后,在你的html中,无论你想要的美分和美分,都可以这样称呼:
<p>{{investor.price_cents | centsToDollars}}</p>
过滤器只会影响数据的显示,并且不会修改基础数据,不会是美分。
如果您需要修改输入字段的显示,则更好的路径可能是指令。您可以执行类似引用here
的操作app.directive('myCentsToDollars', function() {
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, elem, attrs, ngModel) {
var toDollars = function(text) {
var text = (text || "0");
return (parseFloat(text) / 100);
}
var toCents = function(text) {
var text = (text || "0");
return (parseFloat(text) * 100);
}
ngModel.$parsers.push(toDollars);
ngModel.$formatters.push(toCents);
}
}
});
然后,在你的html中,执行:
<input type="text" my-cents-to-dollars ng-model="investor.price_cents" />