Adding custom methods to an Angular $resource to enhance prototypal functionality

Seeking a way to retrieve objects from a server, similar to this:

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

I desire all User instances to possess specific methods for computing derived data without requiring the server to provide it. For instance, given:

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

If the server responds with:

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

I would like the ability to execute:

if (aUser.alertTimePassed()) {
    // perform actions
}

Is there a more elegant method to achieve this goal rather than resorting to something that feels like a workaround?

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

Answer №1

By utilizing a factory to create your $resource, you have the ability to make modifications to the $resource object before it is returned from the factory.

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

    // You can incorporate additional methods here using prototype
    User.prototype.alertTimePassed = function() {
        // Perform actions
    };

    return User;
});

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Handling Errors in Node.js with Express

To access the complete repository for this project, visit: https://github.com/austindickey/FriendFinder After downloading the directory, follow the instructions in the ReadMe to set it up on your computer. Encountering an issue where my survey.html page ...

Adding content to an empty element will not produce the desired result

I'm trying to show each character of a string, which is stored in an array, one at a time. However, when I use threadsleep(a) with the code found here: http://jsfiddle.net/thefiddler99/re3qpuoo/, all the characters are displayed at once. There seems t ...

Issue: Unable to locate element with the specified selector: #email

const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto('https://discord.com/register'); await page.screenshot({path: 'b.png ...

Validation of forms using jQuery validation in conjunction with the bootstrap confirmation plugin

I have a form that is validated using the jQuery validation plugin. Recently, I added a bootstrap confirmation to the submit button with success. However, I am facing an issue where I want the bootstrap confirmation to only appear on the submit button when ...

Unlocking the secret to accessing every cookie on the entire website

Enjoy my website : www.xyz.com www.xyz.com/page1.html www.xyz.com/page2.html www.xyz.com/page3.html www.xyz.com/page4.html www.xyz.com/page5.html .... I am looking to collect cookies data from all the pages with just one click. Instead of visiting eac ...

Attempting to make a slightly bigger than usual AXIOS.post request to a .NET Web API

When attempting to perform an AXIOS.post in a Vue.JS application, the process fails when exceeding about 1500 characters. Instead of reaching the Web API, it goes directly to the error area. Typically, this function calls a .Net Web API that generates a MS ...

Using the .ajax() function with jQuery to retrieve data and then using .find() on that data

Currently I am facing an issue while trying to extract the body tag from the result of the .ajax() call. Instead of getting the desired result, I only see undefined logged into the console... This is the section of code causing the problem: $(document).r ...

Guide on running javascript / jquery code once php page has been fully loaded

I am utilizing a jQuery command to call a PHP page, which will execute several SQL queries and then update a cookie value. I need to retrieve this updated value, but only after the PHP page has completed its task. The current code snippet I am using to cal ...

Error: An unexpected 'if' token was not caught

Encountering an error related to the question title while working with this code snippet: $LAB.queue(function setup() { FB.init({ appId: '00000000', status: true, cookie: true, xfbml: true, logging: &ap ...

What could be causing Firebase serve to malfunction while Firebase deploy runs smoothly?

Every time I run firebase deploy, it successfully creates data. But when I run firebase serve, it always ends up in the catch function! This is the function I'm working with: exports.createUser = functions.https.onRequest((req, res) => { const ...

What's the best way to update the value of a TextInput field?

Previously, I was updating the text input using local state. Here's an example: state = {name: ''} ... <AddEditFormInputs onChangeText={name => this.setState({ name })} textStateValue ...

Updating a nested property within an array of objects in MongoDB

Storing grades for an online education application using MongoDB. Here is a sample classRoom document stored in my mongoDB database. StudentGradeObjs are kept in an array within a GradeObject. GradeObjs are stored in an array of GradeObjects inside a class ...

Using Jquery's append() method to dynamically alter the HTML content

I am attempting to create a table with rows that are added dynamically. The challenge I am encountering is that each row consists of form elements, including multiple inputs. I have a PHP function that generates the correct row, and I have been able to sen ...

Using AngularJS: The ultimate guide to invoking a service within a module

I have a controller that successfully calls a service. However, I now need to access a method within that service from another module. How can I achieve this? BaSiderbarService: (function() { 'use strict'; angular.module('BlurAdmi ...

Node.js using Express: Modifying response data for specific route

I've searched through numerous resources but haven't been able to find a solution, so I'm reaching out for some assistance! :) I have developed a UI5 Application using Node.js with Express on the server-side. The data is retrieved from a SQ ...

Populating a table with information retrieved from a file stored on the local server

Here is the specific table I am working with: <div class="chartHeader"><p>Performance statistics summary</p></div> <table id="tableSummary"> <tr> <th>Measurement name</th> <th>Resul ...

Using a Jquery selector with either the ID Regex or a repetitive class

There is a collection of similar elements with matching IDs Below are two methods for selecting them using Jquery: Select by ID + Regex (For example, How can I select an element by ID with jQuery using regex?) Add a redundant class to all the elemen ...

Having trouble sending an ajax request from localhost to a remote server

When attempting to make an ajax request (using jquery) from my local server to a remote page where I am the administrator, I encounter the following error: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin &ap ...

I'm struggling to wrap my head around the ng-repeat syntax in AngularJS

Recently, I stumbled upon this nested accordion code snippet that piqued my interest: http://embed.plnkr.co/GvMsP2/ I have a question regarding the (phylum, phylum_examples) in animals. Can anyone clarify what these terms represent and what they contain? ...

Execute function upon initial user interaction (click for desktop users / tap for mobile users) with the Document Object Model (DOM)

Looking to trigger a function only on the initial interaction with the DOM. Are there any vanilla JavaScript options available? I've brainstormed this approach. Is it on track? window.addEventListener("click", function onFirstTouch() { console.l ...