web-dev-qa-db-ja.com

AngularJS $ resourceは、URLの代わりにidをクエリパラメーターとして渡します

URLの製品ID部分を使用して(クエリパラメーターとしてではなく)REST APIからデータを取得する必要があります。

工場:

.factory('Products', ['$resource',
    function($resource) {
        return $resource('products/:productId', {
            productId: '@id'
        }, {
            query: {
                isArray: false
            },
            update: {
                method: 'PUT'
            }
        });
    }
])

コントローラー:

$scope.getProduct = function(id, from) {
    $scope.product = Products.get({ id: id }, function(){
        console.log($scope.product);
    });
}

私のURLは次のように構築されています:

/products?id=5426ced88b49d2e402402205

の代わりに:

/products/5426ced88b49d2e402402205

なぜアイデアがありますか?

30
orszaczky

コントローラーでProducts.get()を呼び出すとき、正しいパラメーター名を使用していません($resourceの定義に基づいて、「id」の代わりに「productId」を使用する必要があります)。代わりに次のように呼び出してみてください。

Products.get({ productId: id })

$resourceのドキュメント からの抜粋は次のとおりです。

パラメータオブジェクトの各キー値は、存在する場合は最初にurlテンプレートにバインドされ、次に余分なキーが?の後にURL検索クエリに追加されます。

あなたの場合、URLのパラメーターとして「id」が見つからないため、それをクエリ文字列に追加します。

57
Sunil D.