2013-10-14 12 views
5

カスタムメソッドを定義したリソースがあります。 私のテンプレートでは、このメソッドにヒットできません。 私のコードは次のようになります。 getName()関数が呼び出されていません。私はここで何をしないのです

personservices.factory("Person", ["$resource", function($resource) { 
    var Persons = $resource("", {}, { 
    query: {method:'GET'} 
});              

Persons.prototype.getName = function() { 
    /* do something */ 
    return name; 
    } 
    return Persons; 
}]); 


<ul> 
    <li ng-repeat="person in persons"> 
    {{ person.getName() }} -> not being called 
    {{ person.id }} 
    </li> 
</ul> 

$scope.Persons = Person.query()は - >はあなたの例のサービスは、私が作った唯一の変化は、私はあなたのカスタムquery機能にisArray: trueを追加したということでした、ほぼ完全に定義された

+0

'people'は' people.name'を宣言されている場合は? – Chandermani

+0

質問を編集しました。 getNameで何らかの計算が行われると仮定し、テンプレートに表示される名前である文字列を返します。 –

答えて

3

あなたの問題は、次のとおりです。

  1. あなたは人物のリストをしたいが、あなたの返されたデータがリストではありません。したがって、サービス内でtransformResponseを使用すると、オブジェクトを配列に変換できます。

  2. 機能getNameは、nameではなく、this.nameを返す必要があります。ここで

    app.factory("Persons", ["$resource", function($resource) { 
        var Persons = $resource("", {}, { 
         query: { 
          method:'GET', 
          isArray: true, 
          transformResponse: function(data, header) { 
           return angular.fromJson(data).items; 
          } 
         } 
        });              
    
        Persons.prototype.getName = function() { 
         /* do something */ 
         return this.name; 
        } 
    
        return Persons; 
    }]); 
    

JSFiddleの例である:http://jsfiddle.net/9JFhA/1/

+0

これはうまく見えますが、エラーTypeErrorが発生します。オブジェクト#にはメソッド 'push'がありません。あなたはエラー –

+0

がうまくいっていると思うのですか? –

0

完璧に動作して復帰理由人のリスト。

var Persons = $resource("/person", {}, { 
query: {method:'GET', isArray: true} 

});

カスタムメソッドが呼び出されていない可能性があります。

私が作った作業プランナーを見てみましょう:http://plnkr.co/edit/2i7IHs?p=previewは、$リソースサービスでカスタムメソッドの機能をテストします。

+0

しかし、返されるデータは配列ではありません。当初私はそれを持っていた。私はエラーが発生していた "オブジェクトメソッドのプッシュ"です。それを削除し、それは完璧に働いた。 –

関連する問題