Имам основната си услуга:
(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);
И следващата така наречена класна библиотека:
(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);
Въпросът е: какъв ъглов компонент трябва да използвам за моята класна библиотека. Мислех за служба или фабрика, но не съвсем сигурен какво е по-добре в моя случай.
Отговори:
1 за отговор № 1Отговорът е фабрично и използвайте кода по-долу, за да добавите фабрика
(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
}
});
})();
Фабриката може да съдържа всички класове исвързани с тях. Ако искате да използвате функции в клас. Трябва да създадете отделна фабрика, която да използва тези класове и техните свойства чрез вашия контролер.
Методите, съдържащи фабрики, ще бъдат такива.
module.factory("ServicecontainingMethods", function(){
return{
methodName1:function(){
},
methodName2:function(params){
},
}
});
0 за отговор № 2
Според коментарите и отговорите на тази тема имам следващото решение
(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);