2015-05-19 4 views
1

Я работаю над проектом, который включает в себя модель, которая получает данные из разных json-файлов в зависимости от выбранной среды. Существует один data_dev.json, data_sit.json, data_prd.json ... вы получаете эту идею.Угловая фабрика с несколькими источниками данных

В настоящее время у меня есть эта фабрика, чтобы получить данные, поддерживается только один env.

angular.module('app').factory('Routing',function ($http, $q) { 
    return { 
     index: function() { 
      var defer = $q.defer(); 

      $http.get('data/routing_index_prod.json').success(function (data) { 
       defer.resolve(data); 
      }).error(function() { 
       defer.reject('Could not find ial_routing_index.json'); 
      }); 

      return defer.promise; 
     }, 
    } 
}); 

затем в контроллере:

scope.environment = AppData.get('environment') 
... 
Routing.index().then(function (data) { 
    scope.routingIndex = data; 
}) 

Я хотел бы сказать, завод какой среде я работаю, так что я могу загрузить нужный файл данных. Как я могу это сделать? Является ли завод лучшим решением для этого?

Спасибо

ответ

1

Вы можете хранить адреса и все данные, связанные с окружающей средой в отдельном заводе, из которого вы можете получить их, в зависимости от того, что окружающей среды возвращаются из этого AppData.get('environment') вызова ваших.

angular.module('app').factory('Routing', 'envSettings', function ($http, $q, envSettings) { 
    return { 
     index: function() { 
      var defer = $q.defer(); 

      var env = AppData.get('environment'); 

      $http.get(envSettings.getSettings(env)).success(function (data) { 
       defer.resolve(data); 
      }).error(function() { 
       defer.reject('Could not find ial_routing_index.json'); 
      }); 

      return defer.promise; 
     }, 
    } 
}); 

angular.module('app').factory('envSettings',function() { 
    var settings = { 
     "dev" : { 
      url: 'whatever.json' 
     }, 
     "prd" : { 
      url: 'data/routing_index_prod.json' 
     } 
    }; 
    return { 
     getSettings: function(environment) { 
      return settings[environment]; 
     }, 
    } 
}); 
+0

У меня есть AppData в качестве модели для такого рода вещи, «сеанса» хранятся данные как выбранный env. Вы имеете в виду, что я должен использовать вызов 'AppData.get ('environment')' внутри фабрики маршрутизации? – jmoreno

+0

Да, что-то в этом роде. Проверьте обновленный ответ. –

2

Просто передайте в переменной к индексной функции:

angular.module('app').factory('Routing',function ($http, $q) { 
    return { 
     index: function(environment) { 
      var defer = $q.defer(); 

      $http.get('data/' + environment + '.json').success(function (data) { 
       defer.resolve(data); 
      }).error(function() { 
       defer.reject('Could not find ' + environment + '.json'); 
      }); 

      return defer.promise; 
     }, 
    } 
}); 

контроллер:

scope.environment = AppData.get('environment') 

Routing.index(scope.environment).then(function (data) { 
    scope.routingIndex = data; 
})