首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在AngularJS中使用money-rails

在AngularJS中使用money-rails
EN

Stack Overflow用户
提问于 2013-02-05 12:26:13
回答 1查看 635关注 0票数 1

我正在将我的Rails3.2应用程序中的一些表单转换为使用AngularJS,这样我就可以进行实时计算等等。在我的rails应用程序中,我使用money-rails来处理货币。这会将所有货币字段视为由美分组成的整数。

当我通过JSON将所有信息发送到我的AngularJS模板时,这就成了一个问题。现在,当我想要美元和美分时,我的表单都是以美分为单位的。

我将转换放在AngularJS控制器中,所以当我从服务器获得数据时,我在更新前将其从美分转换为美元&美分,反之亦然。代码如下:

代码语言:javascript
复制
# 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)
    )

有没有更好的方法来做这件事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-06 02:29:03

您可以编写一个筛选器或指令将其转换为HTML中所需的形式。滤镜看起来像这样:

代码语言:javascript
复制
app.filter('centsToDollars', function() {
  return function(input) {
    var out = input / 100;
    return out;
  }
});

然后,在您的html中,无论您想要在哪里显示美分,都可以这样调用它:

代码语言:javascript
复制
<p>{{investor.price_cents | centsToDollars}}</p>

过滤器只会影响数据的显示,而不会修改底层数据。

如果需要修改输入字段的显示,更好的方法可能是指令。您可以执行类似于引用here的操作

代码语言:javascript
复制
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中执行以下操作:

代码语言:javascript
复制
<input type="text" my-cents-to-dollars ng-model="investor.price_cents" />
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14700210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档