【问题标题】:Angular factory with multiple data sources具有多个数据源的 Angular 工厂
【发布时间】:2015-05-19 08:43:46
【问题描述】:

我正在开发一个项目,该项目包含一个模型,该模型根据所选环境从不同的 json 文件中获取数据。有一个data_dev.json、data_sit.json、data_prd.json……你懂的。

目前我有这个工厂,为了获取数据,只支持一个环境。

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

我想告诉工厂我正在使用哪个环境,这样我就可以加载所需的数据文件。我怎样才能做到这一点?工厂是最好的解决方案吗?

谢谢

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    只需将变量传递给索引函数:

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

    【讨论】:

      【解决方案2】:

      您可以将 url 和所有与环境相关的数据存储在单独的工厂中,您可以从中检索它们,具体取决于您的 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];
              },
          }
      });
      

      【讨论】:

      • 我将 AppData 作为这类东西的模型,“会话”存储数据,如当前选择的 env。你的意思是我应该在路由工厂内使用AppData.get('environment') 调用?
      猜你喜欢
      • 2013-11-27
      • 1970-01-01
      • 1970-01-01
      • 2013-12-30
      • 2020-06-03
      • 1970-01-01
      • 1970-01-01
      • 2021-11-04
      • 1970-01-01
      相关资源
      最近更新 更多