2015-11-12 33 views
0

我想從服務器獲取的對象,像:

var User = $resource('/user/:userId', {userId:'@id'}); 

我想User實例都有一定的方法計算得出的數據,而不必返回它的服務器。例如,假設爲:

var aUser = User.get({userId: 43}); 

服務器返回類似:

{id: 43, name: "Bob", alertTimestamp: 1447365544} 

我希望能夠做這樣的事情:

if (aUser.alertTimePassed()) { 
    // do stuff 
} 

有沒有乾淨的方式要做到這一點就像這樣,這似乎很詭計?

var alertTimePassed = function() { 
    var now = (new Date()).getTime()/1000; 
    return now >= this.alertTimestamp; 
}; 
var User = $resource('/user/:userId', {userId: '@id'}, { 
    get: { 
     method: "GET", url: '/user/:userId', 
     transformResponse: [angular.fromJson, function (obj) { 
      obj.alertTimePassed = alertTimePassed; 
     }] 
    } 
}); 
+2

這裏也有類似的問題和答案。 http://stackoverflow.com/questions/17134401/angular-extending-resource-subobject-with-custom-methods | http://stackoverflow.com/questions/18138147/add-a-custom-function-on-angular-resource – mark

回答

0

,如果您使用一個工廠,你可以從工廠返回之前修改$資源對象的$資源。

app.factory('User', function ($resource) { 
    var User = $resource('/user/:userId', {userId: '@id'}); 

    // add any methods here using prototype 
    User.prototype.alertTimePassed = function() { 
     // do stuff 
    }; 

    return User; 
});