2013-10-19 39 views
1

我正在开发一个使用API​​处理数据的AngularJS项目。现在我正在使用$ resource实现“创建”功能。除命名转换之外,一切进展顺利:我使用camelCase,但API仅接受snake_case。 有没有办法将这些密钥自动转换为snake_case?

服务:

services.factory('Salons', ['$resource', 
    function ($resource) { 
     return $resource('/salons/:slug', { 
      slug: "@slug" 
     }); 
    } 
]); 

控制器:

controllers.controller('CreateSalonController', ['$scope', 'Salons', 
    function ($scope, Salons) { 
     $scope.submit = function() { 
      Salons.save(this.salon); 
     }; 
    } 
]); 

查看:

<form name="salonForm" role="form" ng-submit="submit()"> 
    <div class="form-group"> 
     <label for="salonContactFirstName">First name</label> 
     <input name="contactFirstName" type="text" class="form-control" id="salonContactFirstName" data-ng-model="salon.contactFirstName" /> 
    </div> 
... 
+0

我假设你正在使用REST API。你究竟在哪里遇到与案件有关的问题?你可以用一个例子来详细说明吗? – theG33k

+0

感谢您的评论,我更新了问题。看看这个视图:data-ng-model =“salon.contactFirstName”当它被发送到API时,它应该是snake_case。在最坏的情况下,我会在视图中重新格式化它。 – haxpanel

回答

2

我还没有发现任何内置的解决方案,因此我实现了一个:

一新服务:

services.factory('Util', function() { 
     var Util = { 
      stringToSnakeCase: function (input) { 
       return input.replace(/([0-9A-Z])/g, function ($1) { 
        return "_" + $1.toLowerCase(); 
       }); 
      }, 
      objectKeysToSnakeCase: function (input) { 
       var output = {}; 
       _.each(input, function (val, key) { 
        output[Util.stringToSnakeCase(key)] 
         = _.isObject(val) ? Util.objectToSnakeCase(val) : val; 
       }); 
       return output; 
      } 
     }; 
     return Util; 
    } 
); 

和更新的控制器:

controllers.controller('CreateSalonController', ['$scope', 'Salons', 'Util', 
    function ($scope, Salons, Util) { 
     $scope.submit = function() { 
      Salons.save(Util.objectKeysToSnakeCase(this.salon)); 
     }; 
    } 
]);