JSFiddle - React, Tailwind, and code Playground
HTML
<div ng:app="app" ng:controller="MainCtrl">
<p>{{user}}</p>
<button ng:click="refresh()">Refresh</button>
</div>
JavaScript
angular.module('app.api.rest.user', [])
.factory('UserApi', function($timeout){
var UserApi = {};
UserApi.get = function(id){
return $timeout(function(){
return {
id: 1,
name: 'Artem',
someVal: Math.random()
}
}, 1000);
};
return UserApi;
})
angular.module('app.api.entities.user', ['app.api.rest.user'])
.factory('User', function($q, UserApi) {
var cache = {};
var initObject = function(data) {
if (cache[data.id]) {
angular.extend(cache[data.id], new User(data));
} else {
cache[data.id] = new User(data);
}
return cache[data.id];
};
var User = function(data) {
angular.extend(this, data);
};
User.get = function(id){
var apiResult = UserApi.get(id).then(function (test) {
return initObject(test);
});
if (cache[id]) {
return $q.when(cache[id]);
} else {
return apiResult;
}
};
User.getAll = function(options){
return UserApi.getAll(options).then(function(tests){
return _.map(tests, function(test){ return initObject(test); });
});
};
User.create = function(params){
return UserApi.create(params);
};
User.prototype.remove = function(){
return UserApi.remove(this.id);
};
return User;
});
angular.module('app', ['app.api.entities.user'])
.controller('MainCtrl', function($scope, User){
$scope.refresh = function(){
$scope.user = User.get(1);
};
$scope.refresh();
});