2016-07-13 1 views
0

컨트롤러를 사용하여 $http 요청을하게 될 서비스를 호출하지만, 지금은 문자열을 반환하도록 서비스를 설정했습니다. 제대로 작동하고 올바르게 호출되는지 확인하십시오. 내가 그것을 실행하면Angularjs 컨트롤러 호출 서비스 - 함수가 아닌 경우 .success

, 나는 다음과 같은 오류가 발생합니다 :

TypeError: monitorData.requestEvent(...).success is not a function 
아래

내 코드 :

컨트롤러

(function() { 

    angular 
     .module('monitorApp') 
     .controller('eventCtrl', eventCtrl); 

    eventCtrl.$inject = ['$scope', '$routeParams', 'monitorData']; 
    function eventCtrl($scope, $routeParams, monitorData) { 
     var vm = this; 
     vm.eventid = $routeParams.eventid; 
     vm.event = {}; 

     vm.getData = function(eventid) { 
      console.log("getData variable accessed"); 
      monitorData.requestEvent(eventid) 
       .success(function(data) { 
        console.log(data); 
       }) 
       .error(function(e) { 
        console.log("Error"); 
       }); 
      return false; 
     }; 

     vm.getData(vm.eventid); 

    } 

})(); 

서비스

(function() { 

    angular 
     .module('monitorApp') 
     .service('monitorData', monitorData); 

    monitorData.$inject = ['$http']; 
    function monitorData($http) { 
     var requestEvent = function(eventid) { 
      var gas = "Event " + eventid + " requested.." 
      console.log(gas); 
      return gas; 
     }; 

     return { 
      requestEvent : requestEvent, 
     }; 
    } 

})(); 
+0

'$ q' 그리고 나서'defer.resolve'를 사용하여 작동하게하려면 – batmaniac7

+0

'$ q'를 주입하고 가스 대신'$ q.when (gas)'를 반환하면 작동 할 것입니다. – DerekMT12

+0

성공/오류 대신에/catch를 사용해야합니다. 성공/오류 처리기는 더 이상 사용되지 않습니다. – DerekMT12

답변

1

와 체인 deferresolvesuccess

반환 약속을 사용해야합니다, 그것이 작동되도록하기 위해서는 정착 약속을 반환해야 .

monitorData.$inject = ['$http', '$q']; 
function monitorData($http, $q) { 
    var requestEvent = function(eventid) { 
     var gas = "Event " + eventid + " requested.." 
     console.log(gas); 
     return $q.resolve(gas); 
    }; 

    return { 
     requestEvent : requestEvent, 
    }; 
} 

그리고 그런데

, successerror은 기존의 방법을 사용되지 않습니다. 항상 thencatch입니다.

+0

그래서 '.success'를 '.then'로 바꾸고 '.error'를 '.catch'로 바꾸시겠습니까? – Kenny

+0

맞습니다. 'success'와'error'는 호환성을위한 것입니다. 또한 두 개의 콜백 인수를 갖는 단일 'then'일 수도 있습니다. '.then (..., ...)'과'.then (...). catch (...) '에는 약간의 차이가 있습니다. 'catch'는'$ http' 결과와'then' 모두에서 오류를 잡아낼 것입니다. – estus

+0

굉장합니다.이 기능은 폐지 된 성공/오류에 대한 통찰력을 얻었습니다. – Kenny

1

successerror은 약속의 일부이며 약속을 반환하지 않습니다.

가 나중에 체인되기 위해 .success.error

monitorData.$inject = ['$http','$q']; 

var defer = $q.defer(); 
function monitorData($http) { 
     var requestEvent = function(eventid) { 
      var gas = "Event " + eventid + " requested.." 

      defer.resolve(gas) 
      return defer.promise; 
     }; 

     return { 
      requestEvent : requestEvent, 
     }; 
    } 
+0

컨트롤러의 코드는와 동일하게 유지됩니다. 성공과 오류? – Kenny

+0

예. 변경이 없습니다 –

+0

'$ q.when (가스)'를 반환하는 것이 훨씬 쉽습니다. – DerekMT12

관련 문제