Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 在工厂中实例化对象的正确方法是什么?_Angularjs_Oop - Fatal编程技术网

Angularjs 在工厂中实例化对象的正确方法是什么?

Angularjs 在工厂中实例化对象的正确方法是什么?,angularjs,oop,Angularjs,Oop,我最近阅读了,我仍然想知道实例化像这样的对象的好做法是什么: Tracker = function(data){ key: data.key, name: data.name, buckets: data.buckets, enable: data.enable || false, geoip: data.geoip || false } 我的目标是尊重脱钩原则。我的控制器中不需要任何新跟踪器() 基于,我使用工厂将我的控制器与类跟踪器解耦。这是我的工厂 angular

我最近阅读了,我仍然想知道实例化像这样的对象的好做法是什么:

Tracker = function(data){
  key: data.key,
  name: data.name,
  buckets: data.buckets,
  enable: data.enable || false,
  geoip: data.geoip || false
}
我的目标是尊重脱钩原则。我的控制器中不需要任何
新跟踪器()

基于,我使用工厂将我的控制器与类跟踪器解耦。这是我的工厂

  angular
  .module('ranger')
  .factory('factoryTracker', factoryTracker);

factoryTracker.$inject = ['$anyInjetable'];

function factoryTracker($anyInjetable) {
  var factory = {
    instantiate: instantiate
  };

  return factory;
  ///////////

  function instantiate(data){
    return {
      //Properties
      key: data.key,
      name: data.name,
      buckets: data.buckets,
      enable: data.enable || false,
      geoip: data.geoip || false
      //Methods
      helloWorld: helloWorld
    };
  }

  function helloWorld(){
      return "I come in peace";
  }
}
在我的控制器中,我将其用于:

factoryTracker.instantiate({
                key: tracker._id,
                name: tracker.name,
                enable: false
            });
我的问题是我的跟踪器对象的声明方式:

  • 没有真正声明,我们只看到实现

  • 不容易阅读

  • 实现的方法在对象闭包之外

  • 最重要的是:如果我想将类切换为实例化,那么我就不想在工厂中编写它

我谈到了关于使用工厂和在哪里放置模型的几个来源。但是我现在还不能接受我的代码


有什么建议吗?

关于@Chandermani提供的链接,这里是我的最终代码。清晰、清晰、易读

angular
  .module('ranger')
  .factory('factoryTracker', factoryTracker);

    factoryTracker.$inject = ['$q'];

    function factoryTracker($q) {

        /**
        * Constructor, with class name
        */
        function Tracker(data) {
          // Public properties, assigned to the instance ('this')
          this.key = data.key;
          this.name = data.name;
          this.buckets = data.buckets;
          this.enable = data.enable;
          this.geoip = data.geoip;
        }

        /**
        * Public method, assigned to prototype
        */
        Tracker.prototype.helloWorld = function () {
          return "I come in peace";
        };

        /**
        * Static method, assigned to class
        * Instance ('this') is not available in static context
        */
        Tracker.build = function (data) {
          return new Tracker(data);
        };

        return Tracker;
    }

你也可以在这篇文章中找到有用的资源,非常感谢。