mam pojęcia, oceniając tę bibliotekę: https://github.com/FacultyCreative/ngActiveResource
Jednak ta biblioteka zakłada ścisłą resztę, więc to nie było dla mnie. Co nie działa na to:
stworzyłem baza modelu
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;
});
niż Wziąłem proste rozszerzenia funkcji "dziedziczy"
Function.prototype.inherits = function (base) {
var _constructor;
_constructor = this;
return _constructor = base.apply(_constructor);
};
i teraz ja cam tworzenia moje modele jak ten
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;
}
]);
Wreszcie, używając go w kontr Oller
app.controller('MyCtrl', [
'$scope', 'Blog',
function($scope, Blog) {
Blog.get(...).then(function(blog) {
$scope.blog = blog;
});
}
])
Teraz jest o wiele bardziej w naszym modelu i rozszerzeń, ale byłoby to główna zasada. Nie twierdzę, że jest to najlepsze podejście, ale pracuję dość dużą aplikacją i to naprawdę działa doskonale dla mnie.
UWAGA: Należy pamiętać, że wpisałem tutaj ten kod i mogą to być błędy, ale główna zasada jest tutaj.
Wydaje się to łatwe do wdrożenia; Ideałem byłoby połączyć to w jakiś sposób ze schematem, który zdefiniowałem po stronie węzła z mangustą, aby uzyskać właściwości od miejsca, w którym zostały zdefiniowane, zamiast przepisywania ich i łączenia z metodami z kątowej usługi. Myślałem o ngResource, ale nie udało się zbudować pracy. Czy to ma sens? – vonwolf
Nie jestem tego pewien. Wydaje mi się, że robiąc to (i nie wiem, czy to możliwe, czy nie), próbujesz połączyć Frontend i Backend. Z reguły im bardziej oddzielone, tym lepiej. W każdym razie 'ngResource' jest po prostu opakowaniem dla zasobu' $ http', którego osobiście nie lubię. – domokun
@domokun Jak działa "new myFactory()" w twoim przypadku? Fabryka zwraca obiekt, więc nie można normalnie nazwać tego "nowym ...()". Czy robisz dodatkowe sztuczki? Otrzymuję to, że 'obiekt nie jest funkcją'. – Lycha