2015-09-20 2 views
0

Я недавно прочитал Angular Style Guide, и я до сих пор удивляюсь, что есть хорошие методы для создания экземпляра объекта, как это:Каков правильный способ создания объекта в угловом заводе?

Tracker = function(data){ 
    key: data.key, 
    name: data.name, 
    buckets: data.buckets, 
    enable: data.enable || false, 
    geoip: data.geoip || false 
} 

Мои цели является соблюдение Principe развязки. Я не хочу, чтобы в моем контроллере был new Tracker().

Основываясь на Angular Style Guide, я использую фабрику для развязки моего контроллера из класса Tracker. Вот моя фабрика.

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

Моей проблема заключается в пути моего объекта Tracker объявлено:

  • на самом деле не объявлен, мы видим только осуществление

  • нелегко читать

  • реализованы методы вне замыкания объекта ...

  • Самое главное: если я хочу, чтобы переключить класс экземпляр, так что я не хочу, чтобы написать его на заводе.

Я пришел к этому относительно нескольких источников использования фабрик и для размещения моделей. Но я пока не в порядке с моим кодом.

Рекомендации:

+0

Ну вы также можете на это сообщение https://medium.com/opinionated-angularjs/angular-model-objects-with-javascript-classes-2e6a067c73bc – Chandermani

+0

Полезная Ressource, спасибо вам большое. – dagatsoin

ответ

0

Что касается ссылки, предоставленной @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; 
    }