Использование фабрики на фабрике в angularjs - PullRequest
0 голосов
/ 29 мая 2018

У меня есть угловое приложение, которое считывает некоторые данные из разных 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.

Правильно ли я использую фабрики?и как я могу вводить их друг в друга?

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Вам нужно исправить эту строку, добавив $ http в минимизированный список:

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

изменить на эту строку:

eqDetail.factory('lastInspectionDetail', ['$http','eqInfoFactory', function($http,eqInfoFactory) {
0 голосов
/ 29 мая 2018

Внедрение зависимостей Angular требует, если оно используется с нотацией массива (что, безусловно, должно, по крайней мере, для минимизации безопасности), каждой зависимости - так что вам не хватает службы $http Angular:

//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
  }
}]);
...