2017-09-28 5 views
0

다른 사람들이 개발 한 응용 프로그램에서 작업하고 있는데 설명서 나 연락 방법이 없습니다.이 문제가 있습니다.

매분마다 새로 고침해야하는 각도 응용 프로그램입니다. 응용 프로그램의 다른 부분에서, 그들은 $ 간격을 사용하고 있지만,이 페이지에 나는 그것을 사용하는 내 WebAPI 정지 작업에 대한 호출을 시도하고 나는이 오류 받아 봐 경우 :

WebApiFactory.getNoStatusOrders is not a function 

는 내가 알고 당신의 도움이 필요를 왜 이런 일이 일어나고, 내 코드는 다음과 같습니다.

angular.module('AssemblyLive').controller('overviewCarsWithoutStatus', [ 
'$scope', '$rootScope', '$location', 'WebApiFactory', "$interval", 'StatusPointMonitorFactory', 
function ($scope, $rootScope, $location, $interval, WebApiFactory, StatusPointMonitorFactory) { 
    ... 
    var areas = { 
     bodyShop1:"B000,B001,B020,B031,B200,B211,B220,B231,B300,B311,B320,B331,B370,B371,B375,B376,B380,B381,B383,B386,B390,B400,B401,B410,B420,B421,B425,B426,B430", 
     bodyShop2: "B431,B435,B436,B440,B451,B500,B521,B540,B551,B553,B600,B750,B760,B770,B781,B783,B790,B791,B800,B811,B813,B900", 
     paintShop1: "D000,D011,D012,D051,D100,D130,D131,D132,D151,D152,D230,D251,D252,D300,D351,D352,D360,D381,D390,D400,D451,D452,D470", 
     paintShop2: "D471,D472,D481,D482,D500,D501,D531,D532,D540,D561,D562,D600,D620,D650,D670,D691,D692,D700,D731,D741,D750,D800,D812,D821,D822,D841,D842", 
     assembly: "F000,F100,F150,F200,F250,F300,F350,F400,F450,F500,F550,F600,F650,F700,F750,F800,F850,F900" 
    }; 
    ... 
    //Start the creation of the overview. 
    function initializeOverview() { 
     $scope.counters = []; 
     //Iterates over the configuration. 

     //Get all the status to call the query. 
     var status = $scope.headers.map(function(a) {return a.status.toString();}); 
     //Call to create the knrs b y area. 
     getKNRWithoutStatus(status.toString()); 


     for(var status in areas){ 
      getCarsWithNoStatus(areas[status]); 
     } 

     getNoStatusCounters("B000,C000,D000,E000,E500,F000,F100,F950,G000,G900"); 

    } 
    // Funtion to set the counters in the table headers 
    function getNoStatusCounters(status) { 
     WebApiFactory.getNoStatusOrdersCounter(status).then(function (resultData) { 
      Object.getOwnPropertyNames(resultData.NoStatusOrders).forEach(function(name) { 
    ... 
    function getCarsWithNoStatus(status) { 
     // Fetch all the counters from the WebAPI 
     WebApiFactory.getNoStatusOrdersCounter(status).then(function (resultData) { 
      ... 

    function getKNRWithoutStatus(status) { 
     var orders = []; 
     //Query the status monitor. 
     WebApiFactory.getNoStatusOrders(status).then(function(statusMonData) { 
      ... 

    /** To refresh data when the clock in the footer refresh. */ 
    $rootScope.$on('carsWithoutStatusOverview', function(){ 
     initializeOverview(); 
     $interval(initializeOverview, Config.dataRefreshInterval * 1000) 
    }); 

참고 : $ interval을 추가하지 않고도 내 페이지가 완벽하게 작동합니다.

+0

여기서'areas' 변수가 정의 되었습니까? –

+0

코드 시작 부분에 전역 변수로 정의 됨 (수정 된 질문) –

+0

방금 ​​내 코드를 더 추가했습니다. 너무 길기 때문에 모두 붙여 넣기가 불가능합니다. –

답변

1

의존성 주입을 검토하십시오. WebApiFactory$interval을 $ inject 목록과 매개 변수의 다른 위치에 넣습니다. (따라서 $interval 변수는 WebApiFactory 서비스를 가리키며 그 반대의 경우도 마찬가지입니다.)

+0

진짜입니까? 그게 중요한가요?, 나도 내게 각성의 아이디어를 가졌지 만 지금까지는 그것을 결코 사용하지 않았기 때문에 그것이 중요한 위치라고 생각하지 않았다. –

+1

물론입니다. 문자열 배열은 등록 된 서비스가 어떤 매개 변수 위치에 삽입 할 것인지를 알려줍니다. 매개 변수 이름 자체는 임의의 지역 변수 이름입니다. –

+1

참고 : $ inject 목록을 생략하면 매개 변수 이름과 일치하는 서비스를 제공하기 위해 Angular가 TRY됩니다. 그러나 코드를 축소하면 신뢰할 수 없습니다. 매개 변수 이름은 짧은 하나 또는 두 개의 문자 토큰으로 대체되며 Angular는 더 이상 문자 토큰과 일치하지 않습니다. 이것이 배열 구문이있는 이유입니다. 문자열은 안전합니다. –