ho avuto idea valutando questa libreria: https://github.com/FacultyCreative/ngActiveResource
Tuttavia questa libreria assume rigoroso riposo in modo che non era un lavoro per me. Che cosa ha fatto il lavoro per questo:
ho creato di base Modello
var app = angular.module('app', []);
app .factory('Model', function(){
var _cache = {}; // holding existing instances
function Model() {
var _primaryKey = 'ID',
_this = this;
_this.new = function(data) {
// Here is factory for creating instances or
// extending existing ones with data provided
}
}
return Model;
});
Than ho preso estensioni delle funzioni semplici "eredita"
Function.prototype.inherits = function (base) {
var _constructor;
_constructor = this;
return _constructor = base.apply(_constructor);
};
e ora Cam creare i miei modelli come questo
app.factory('Blog', [
'Model',
'$http',
function(Model, $http) {
function Blog() {
// my custom properties and computations goes here
Object.defineProperty(this, 'MyComputed' , {
get: function() { return this.Prop1 + this.Prop2 }
});
}
// Set blog to inherits model
Blog.inherits(Model);
// My crud operations
Blog.get = function(id) {
return $http.get('/some/url', {params: {id:id}}).then(function(response) {
return Blog.new(response.data);
});
}
return Blog;
}
]);
Infine, utilizzarlo in contr oller
app.controller('MyCtrl', [
'$scope', 'Blog',
function($scope, Blog) {
Blog.get(...).then(function(blog) {
$scope.blog = blog;
});
}
])
Ora, c'è molto di più nel nostro Modello e nelle estensioni, ma questo sarebbe un principio fondamentale. Non sto affermando che questo è il miglior approccio, ma sto lavorando app piuttosto grandi e funziona davvero benissimo per me.
NOTA: Si prega di notare che ho digitato questo codice qui e potrebbero essere alcuni errori ma il principio principale è qui.
Sembra facile da implementare; quello che sarebbe perfetto sarebbe quello di collegare questo in qualche modo allo schema che ho definito sul lato del nodo con mangusta in modo da ottenere le proprietà da dove sono definite invece di riscriverle e combinarle con i metodi del servizio angolare. Stavo pensando a ngResource ma non ho avuto successo nel costruire il caso di lavoro. Avrebbe senso? – vonwolf
Non ne sono sicuro. Mi sembra che in questo modo (e non so se sia fattibile o meno) stai cercando di accoppiare Frontend e Backend. Come regola generale, più è disaccoppiato, meglio è. In ogni caso, 'ngResource' è solo un wrapper per la risorsa' $ http', che personalmente non mi piace. – domokun
@domokun come funziona il 'new myFactory()' nel tuo caso? La factory restituisce un oggetto, quindi normalmente non puoi chiamare 'new ...()' su quello. Stai facendo qualche trucco aggiuntivo? Ottengo che "l'oggetto non è una funzione". – Lycha