Angularjs 如何使用angular$resource定义自定义方法?

Angularjs 如何使用angular$resource定义自定义方法?,angularjs,angular-resource,Angularjs,Angular Resource,我有以下代码: angular.module('myApp').factory 'Product', ($resource) -> Product = $resource '/api/v1/products/:id', {}, all: { method: 'GET', isArray: true } edit: { method: 'GET', url: '/api/v1/products/:id/edit' } Product.prototype.

我有以下代码:

angular.module('myApp').factory 'Product', ($resource) ->

  Product = $resource '/api/v1/products/:id', {},
    all:    { method: 'GET', isArray: true }
    edit:   { method: 'GET', url: '/api/v1/products/:id/edit' }

  Product.prototype.images = ->
    this.$promise.then (data) ->
      image = $resource "/api/v1/products/#{data.id}/images"
      image.query().$promise.then (data) -> data

  return Product
原型上定义的
images
方法有效,但我想知道是否可以使用我用来定义
all
edit
的自定义方法DSL来实现这一点


如何才能做到这一点?

是的,您可以定义一种方法来获取特定产品的图像,一种方法是将资源配置更改为默认为资源“实例”的id,并将控制器变量添加到资源路由中

$resource '/api/v1/products/:id/:controller', { id: '@id' },
  all:
    method: 'GET'
    isArray: true
  edit:
    method: 'GET'
    params: controller: 'edit'
  getImages:
    method: 'GET'
    isArray: true
    params: controller: 'images'

现在,您可以直接从以下资源调用该方法:
Product.getImages({id:'aProductId'})
,或者从实例:
Product.$getImages()

这实际上不是一回事。我的实现允许我调用实例方法。例如,product=product.all(id:1);images=product.images()。这可以做到吗?是的,可以做到,我相应地编辑了答案。希望helpedIt不起作用。我得到
api/v1/products/images 404
——产品id没有从实例传递到viw'@id'。