/ / AngularJs: Какво трябва да използвам, за да създам библиотеката си за клас (услуга / фабрика / доставчик)? - ъгли

AngularJs: Какво трябва да използвам, за да създам библиотеката си за клас (услуга / фабрика / доставчик)? - ъгли

Имам основната си услуга:

(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);