0

ユーザーがアプリ内のドキュメントのスラッグ名 (URL) を設定できるようにしたいのですが、ユーザーが互いにオーバーライドしないように制御する必要もあります。ユーザーが独自のスラッグ名の提案について視覚的なフィードバックを得ることができるように、別の呼び出し ( create/と統合されていない) である必要があります。update

したがって、最終的なスラッグ名のシードとしてsuggestSlugオプションのパラメーターを取る API 呼び出しを作成しました。slug

これは私のExpressルートがどのように見えるかです:

app.get('/api/projects/suggestSlug/:slug', projects.suggestSlug);
app.get('/api/projects/suggestSlug', projects.suggestSlug);
app.get('/api/projects', projects.list);
app.get('/api/projects/:id', projects.show);

ここで、クライアント側 (AngularJS) で ngResource を拡張して、この API を利用したいと考えています。

angular.module('myapp.common').factory("projectModel", function ($resource) {
    return $resource(
        "/api/projects/:id",
        { id: "@id" },
        {
            update: { method: "PUT", params: { id: '@_id' } },
            del: { method: "DELETE", params: { id: '@_id' } }
        }
    );
});

新しい API を使用するために ngResource クライアントを拡張するにはどうすればよいですか?

4

1 に答える 1

0

これが私の解決策でした: 別の $http ベースのメソッドを projectModel に追加します。

angular.module('myapp.common').factory("projectModel", function ($resource, $http) {

    var projectModel = $resource(
        "/api/projects/:id",
        { id: "@id" },
        {
            update: { method: "PUT", params: { id: '@_id' } },
            del: { method: "DELETE", params: { id: '@_id' } }
        }
    );

    projectModel.suggestSlug = function (slugSuggestion, callback) {
        $http.get(
            '/api/projects/suggestSlug/' + slugSuggestion
            ).success(callback).error(function(error) {
                console.log('suggestSlug error:', error);
            });
    };

    return projectModel;
});
于 2014-03-26T08:51:43.770 に答える