如何将原型方法添加到角度$资源?

时间:2015-11-12 22:04:01

标签: javascript angularjs prototype

我想从服务器获取对象,例如:

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;
        }]
    }
});

1 个答案:

答案 0 :(得分:0)

如果使用工厂创建$资源,则可以在从工厂返回之前修改$ resource对象。

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;
});