2013-03-04 30 views
5

Tôi đã làm theo các ví dụ nhưng dường như đã xảy ra sự cố khi thêm phương thức tùy chỉnh vào nguyên mẫu của tài nguyên.

app.factory('Product',function ($resource,$cacheFactory) { 
     var Product = $resource('/the/url/:id', {id: '@id'}), 
      cache = $cacheFactory('Product'), 
      products; 
     Product.prototype.all = function(){ 
      products = cache.get('all'); 
      if(typeof products == 'undefined'){ 
       products = Product.query(); 
       cache.put('all',products); 
      } 
      return products; 
     }; 
     return Product; 
    }) 

Trong bộ điều khiển tôi làm $scope.products = Product.all(); nhưng tôi nhận

+0

Bạn có thể cung cấp liên kết cho ví dụ về cách thêm vào nguyên mẫu $ resource không? Tôi không nhớ bao giờ thấy điều đó. –

Trả lời

12

Product.prototype.all xác định phương pháp thể hiện.

Bạn nên xác định nó là phương thức tĩnh Product.all = function(){...].

Chỉ sau đó bạn mới có thể gọi số này là $scope.products = Product.all();.

+0

Cảm ơn, tôi không biết tại sao tại thời điểm này tôi làm cho loại sai lầm XD – olanod

+3

Dễ hiểu. Những lỗi đơn giản này thường dễ dàng trượt qua trong các dự án phức tạp, hoặc vào những ngày dài. – Stewie

3

Tôi nghĩ đó là bởi vì bạn không thực sự có một ví dụ được nêu ra. Bạn cần thực hiện việc này:

$scope.products = new Product(); 
// now you can run the all function 
$scope.products.all() 

Tùy chọn khác của bạn sẽ là xác định phương thức all() ở cấp dịch vụ. Thay vì thêm vào mẫu thử nghiệm, chỉ có sẵn sau Sản phẩm mới(), bạn có thể sửa đổi như:

app.factory('Product',function ($resource,$cacheFactory) { 
    var Product = $resource('/the/url/:id', {id: '@id'}), 
     cache = $cacheFactory('Product'), 
     products; 
    Product.all = function(){ 
     products = cache.get('all'); 
     if(typeof products == 'undefined'){ 
      products = Product.query(); 
      cache.put('all',products); 
     } 
     return products; 
    }; 
    Product.prototype.$all = function() { 
     Product.all.call(this); 
    } 
    return Product; 
}) 

Bằng cách này, bạn sẽ có Product.all() trên tài nguyên và sản phẩm. $ All() on trường hợp.

+0

Khi tài nguyên được tiêm không phải là một thể hiện của dịch vụ được xác định? Làm cách nào tôi có thể thực hiện việc này mà không cần khởi tạo dịch vụ? – olanod

+0

Khi nó được tiêm, bạn sẽ có được một thể hiện của dịch vụ, có, nhưng không phải là một thể hiện của một tài nguyên. Cập nhật câu trả lời để bao gồm cách bạn có thể gọi một phương thức all() ở mức dịch vụ. –

Các vấn đề liên quan