Mam swoją główną usługę:
(function (angular) {
"use strict";
angular
.module("app")
.service("mainService", mainService);
mainService.$inject = ["classLibrary"];
function mainService(classLibrary) {
this.person = new classLibrary.Person("Name", "Surname");
};
})(window.angular);
I następna tak zwana biblioteka klas:
(function (angular) {
"use strict";
angular
.module("app")
.service("classLibrary", classLibrary); // service/factory/provider ?
function classLibrary() {
// Classes:
this.Person = function(name, surname) {
this.name = name;
this.surname = surname;
};
};
})(window.angular);
Pytanie brzmi: jakiego elementu kątowego powinienem użyć w swojej bibliotece klas. Myślałem o serwisie lub fabryce, ale nie jestem pewien, co jest lepsze w moim przypadku.
Odpowiedzi:
1 dla odpowiedzi № 1Odpowiedź jest fabryczna i użyj poniższego kodu, aby dodać fabrykę
(function (angular) {
"use strict";
angular
.module("app")
.factory("classLibrary", classLibrary);
var classLibrary function() {
// Classes
var obj = {
fieldname1: "val1",
fieldname2: "value2"
};
//if your using array of objects use this
var objArray =[];
return
{
obj :obj ,
objArray:objArray
}
});
})();
Fabryka może zawierać wszystkie klasy ipowiązane właściwości. Jeśli chcesz korzystać z funkcji wewnątrz klasy. Musisz utworzyć oddzielną fabrykę, która będzie mogła korzystać z tych klas i ich właściwości za pośrednictwem kontrolera.
Metody zawierające fabryki będą takie.
module.factory("ServicecontainingMethods", function(){
return{
methodName1:function(){
},
methodName2:function(params){
},
}
});
0 dla odpowiedzi nr 2
Zgodnie z komentarzami i odpowiedziami na ten temat mam kolejne rozwiązanie
(function (angular) {
"use strict";
angular
.module("app")
.factory("classLibrary", classLibrary);
function classLibrary() {
var factory = {
getPerson: function(name, surmane) { return new Person(name, surname); },
getManager: function(name, surmane) { return new Manager(name, surname); }
};
// Private members
function Person(name, surname) {
this.name = name;
this.surmane = surname;
this.toString = function() {
return this.name + this.surname;
};
}
function Manager(name, surname) {
this.constructor.prototype = Person;
this.manager = true;
}
// ---
return factory;
};
})(window.angular);