2016-09-30 6 views
0

공장 :각도 공장과 컨트롤러간에 약속을 사용하는 방법은 무엇입니까? - 성가신 문제 갖는 - 감사

function thingyFactoryFunction($http) { 
    return { 
     search: function(city, state) { 
     $http({ 
      method: 'POST', 
      url: 'http://localhost:7500/search', 
      data: {city: city, state: state} 
     }).then(function successCallback(res) { 
      return res 
     }) 
     } 
    } 
    } 

것은 여기 내 컨트롤러입니다. 제어기가 위의 공장에서 응답을 받기만하면 vm.thing을 약속 응답과 동일하게 설정할 수 있습니다. 그러나 나는 한 번 더 보게되면 베르제르크에 갈 것입니다 : 'TypeError : 속성을 읽을 수 없습니다', 'undefined'라는 오류가 계속 발생합니다.

+2

방금 ​​전에'리턴'추가 컨트롤러

app.factory('thingyFactory', function($http) { return { search: function(city, state) { //This will return promise object. return $http({ method: 'POST', url: 'http://localhost:7500/search', data: { city: city, state: state } }); } } });
,'$ http' 처음에 – smnbbrv

+1

, 컨트롤러에서 당신에게 안 thingy.search가 아닌 thingyFactory.search로 검색 팩토리 함수를 호출 하시겠습니까? –

답변

0

귀하의 공장/서비스 검색 방법이 아무 것도 반환하지 않습니다. .then()에 액세스하려고합니다 (정의되지 않음). $ http 자체가 promise 객체를 반환합니다. 다음을 시도해보십시오.

app.controller('thingyIndexController', function($scope, thingyFactory) { 
 
    var vm = this; 
 
    vm.search = function() { 
 
    var promise = thingyFactory.search(vm.city, vm.state); 
 
    //after promise resolved then() method get called 
 
    promise.then(function(res) { 
 
     console.log(res); 
 
    }) 
 
    } 
 
});

+0

"공장/서비스가 아무것도 반환하지 않습니다."라고 말하면 ... 왜 아무것도 반환하지 않습니까? {} 블록에서 'return'단어 뒤에 표시된 전체 Search 메소드를 반환하지 않습니까? –

+0

미안하지만, 사실을 말하고 싶네요. 팩토리. 검색해라. 내 잘못이야. – ram1993