AngularJs:我应该用什么来创建我的类库(服务/工厂/提供者)?

时间:2016-11-18 12:20:34

标签: 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);

问题是:我应该为我的类库使用什么角度组件。我想过服务或工厂,但不确定在我的情况下什么更好。

2 个答案:

答案 0 :(得分: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
        }
   });
})();

工厂可以包含所有classess和相关属性。 如果要在类中使用函数。您需要创建一个单独的工厂,可以通过控制器使用这些类及其属性。

包含方法的工厂将是这样的。

module.factory('ServicecontainingMethods', function(){
    return{

        methodName1:function(){

        },
        methodName2:function(params){

        },

    }
});

答案 1 :(得分:0)

根据对此主题的评论和回答,我得到了下一个解决方案

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