【问题标题】:How to add prototypal methods to an angular $resource? [duplicate]如何将原型方法添加到角度 $resource? [复制]
【发布时间】:2015-11-13 06:29:44
【问题描述】:

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

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
}

有没有一种干净的方法可以做到这一点,而不是像这样看起来很hacky?

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

【问题讨论】:

标签: javascript angularjs prototype


【解决方案1】:

如果您使用工厂创建 $resource,您可以在从工厂返回之前修改 $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;
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    • 2021-12-24
    相关资源
    最近更新 更多