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>
...
4

1 に答える 1

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));
        };
    }
]);
于 2013-10-26T13:39:26.107 に答える