2013-10-14 142 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() - >作品完美

+0

哪里是'people'宣布'people.name'? – Chandermani

+0

我编辑了这个问题。我们可以假定在getName中发生了一些计算,并返回一个字符串,该字符串是要在模板中显示的名称。 –

回答

3

您的问题是:

  1. 你想要的人的名单,但你返回的数据是不是列表。因此,您可以在服务中使用transformResponse将对象转换为数组。

  2. 功能getName应返回this.name而不是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:对象#没有方法'推'。你认为可能是什么错误 –

+0

让它工作谢谢你! –

0

你的示例服务定义几乎是完美的,我所做的唯一的变化是,我添加了一个isArray: true到您的自定义query功能,因为它的回报一个人的名单。

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

});

也许这就是您的自定义方法未被调用的原因。

看看我制作的plunker:http://plnkr.co/edit/2i7IHs?p=preview,它在$ resource服务中测试自定义方法的功能。

+0

但我返回的数据不是一个数组。最初我有这个。我收到错误“对象没有方法推送”。删除它,它运作完美。 –

相关问题