2013-08-08 34 views
19

Tôi có một nguồn góc mà đi một cái gì đó như thế này

app.factory('User', function ($resource) { 
    return $resource(
     '/api/user/:listCtrl:id/:docCtrl/', { 
      id: '@id', 
      listCtrl: '@listCtrl', 
      docCtrl: '@docCtrl' 
     }, { 
      update: { 
       method: 'PUT' 
      }, 
      current: { 
       method: 'GET', 
       params: { 
        listCtrl: 'current' 
       } 
      }, 
      nearby: { 
       method: 'GET', 
       params: { 
        docCtrl: 'nearby' 
       }, 
       isArray: true 
      } 
     } 
    ); 
}); 

bây giờ tôi muốn có tên đầy đủ trong giao diện, tôi có thể thêm một phương pháp để khi tôi làm điều này

$scope.user = User().current(); 

thay vì cách làm như sau trong html

<p>{{ user.first_name }} {{ user.last_name }}</p> 

tôi làm

này
<p>{{ user.get_full_name }}</p> 

có cách nào để thêm thuộc tính này vào $resource không?

+0

:) .. này là khoảng hai năm trước đây .. :) – debuggerpk

Trả lời

51

Bạn có thể thêm nó như là một tài sản sử dụng transformResponse, nhưng có thể tôi khuyên bạn nên chỉ cần thêm một phương pháp để mọi đối tượng trả về tên đầu tiên và cuối cùng kết hợp:

app.factory('User', function ($resource) { 
    var User = $resource(
     '/api/user/:listCtrl:id/:docCtrl/', { 
      id: '@id', 
      listCtrl: '@listCtrl', 
      docCtrl: '@docCtrl' 
     }, { 
      update: { 
       method: 'PUT' 
      }, 
      current: { 
       method: 'GET', 
       params: { 
        listCtrl: 'current' 
       } 
      }, 
      nearby: { 
       method: 'GET', 
       params: { 
        docCtrl: 'nearby' 
       }, 
       isArray: true 
      } 
     } 
    ); 
    // add any methods here using prototype 
    User.prototype.get_full_name = function() { 
     return this.first_name + ' ' + this.last_name; 
    }; 
    return User; 
}); 

Sau đó sử dụng:

<p>{{ user.get_full_name() }}</p> 

Bất kỳ chức năng nào được thêm bằng nguyên mẫu sẽ được thêm vào mọi đối tượng do Dịch vụ của bạn trả về. Đó là một cách tuyệt vời để thêm các phương thức trợ giúp nếu bạn cần thực hiện việc nhận hoặc thiết lập các thuộc tính dịch vụ phức tạp.

+0

Hoạt động tốt. Chỉ cần chắc chắn rằng bạn đủ điều kiện tài sản với 'this.', vấp qua này ... –

+1

Cảm ơn bạn đã trả lời câu hỏi thực tế, thay vì cung cấp các lựa chọn thay thế 'tốt hơn' cho kịch bản cụ thể của người hỏi ban đầu. – RonLugge

+0

@RonLugge aye aye đội trưởng. như Tim đã nói, chỉ cần chắc chắn rằng bạn chăm sóc điều này. – debuggerpk

1

Tôi nghĩ bạn nên xem xét cách transformResponse.

Btw, bạn sử dụng phiên bản góc nào?

+0

tôi đang sử dụng góc 1.1.5 ... không bao giờ nhìn transformResponse trước, hãy để tôi kiểm tra xem nó ra, nhờ con trỏ – debuggerpk

+0

bạn có thể xem http://stackoverflow.com/questions/17134401/angular-extending-resource-subobject-with-custom-methods – falinsky

+0

oh .. cảm ơn .. điều này giải quyết vấn đề của tôi nghĩ: D – debuggerpk

5

sau khi chơi một lúc với góc cạnh, tôi nghĩ bộ lọc khách hàng sẽ là cách tiếp cận khôn ngoan hơn nhiều, thay vì thêm thuộc tính vào tài nguyên $.

ở đây là làm thế nào để làm một bộ lọc

app.filter('getFullName', function() { 
    return function (input) { 
     if (input) { 
     return input.first_name + ' ' + input.last_name; 
     } else { 
     return 'default'; 
     } 
    }; 
    }); 
Các vấn đề liên quan