【问题标题】:Using factory in factory in angularjs在 angularjs 中使用工厂中的工厂
【发布时间】:2018-05-29 08:01:09
【问题描述】:

我有一个角度应用程序,它从不同的 API 读取一些数据,我编写了多个工厂来捕获它们,每个工厂都应该使用一个参数来检索工厂提供的数据。像这样:

var eqDetail = angular.module('eqDetail', []);
eqDetail.config(['$locationProvider', function($locationProvider) {
  $locationProvider.html5Mode({
    enabled: true,
    requireBase: false
  });
}]);


eqDetail.factory('eqInfoFactory', function($location, $http) {
  return {
    eqInfo: getEqInfo()

  }

  function getEqInfo() {
    //routines for acquiring data and sanitize data
  });
return tmp // and object contaning sanitized data           
}
});
eqDetail.factory('lastInspectionDetail', ['eqInfoFactory', function($http,
  eqInfoFactory) {
  return {
    insInfo: getInsInfo()
  }

  function getInsInfo() {
    var eq = eqInfoFactory.eqInfo;
    // get second set of data base on 'eq'

    return tmp
  }
}]);


eqDetail.controller('eqInfo', function($scope, eqInfoFactory) {
  $scope.eq = {};
  $scope.eq = eqInfoFactory.eqInfo;
  console.log($scope.eq);

});
eqDetail.controller('inspectionResult', function($scope, lastInspectionDetail) {
  $scope.insResult = lastInspectionDetail.insInfo;
  console.log($scope.insResult)
})

问题是第二个工厂的eqInfoFactory.eqInfo 出来的时候是undefined。

我是否以正确的方式使用工厂?以及如何将它们相互注入?

【问题讨论】:

标签: javascript angularjs factory


【解决方案1】:

Angular 的依赖注入需要,如果它与数组表示法一起使用(至少为了缩小安全性,它肯定应该这样做),每个依赖项 - 所以你错过了 Angular 的 $http 服务:

//should be ['$http', 'eqInfoFactory', fn(x)...]
eqDetail.factory('lastInspectionDetail', ['eqInfoFactory', function($http,
  eqInfoFactory) {
  return {
    insInfo: getInsInfo()
  }

  function getInsInfo() {
    var eq = eqInfoFactory.eqInfo;
    // get second set of data base on 'eq'

    return tmp
  }
}]);

【讨论】:

  • 谢谢,但是eqInfoFactory.eqInfo 现在是一个空对象,而不是另一个在其控制器上运行良好的工厂的实际输出,知道为什么吗?工厂的定义顺序也很重要吗?
【解决方案2】:

您需要通过将 $http 添加到缩小列表来修复此行:

eqDetail.factory('lastInspectionDetail', ['eqInfoFactory', function($http,eqInfoFactory) {

改成这一行:

eqDetail.factory('lastInspectionDetail', ['$http','eqInfoFactory', function($http,eqInfoFactory) {

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    相关资源
    最近更新 更多