3

저는 처음으로 각도 1.2.18로 작업하고 있습니다. 레일 3.2와 coffeescript로 사용하고 있습니다. 서비스에서 약속을 사용하여 템플릿을 채우기 위해 사용할 데이터를 가져 오려고합니다. 내 코드는 다음과 같습니다.서비스에서 각성 약속의 응답 문제

angular.module('myApp') 
.service('fetchService', ['$http', '$q', ($http, $q) -> 
theService = {} 
    theService.myData = null 

    theService.getData = (url) -> 
    q = $q.defer() 

    if this.myData 
     q.resolve(this.myData) 
     return q.promise 

    self = this 
    $http.get(url).then(
     (successResonse)-> 
     self.myData = successResponse 
     q.resolve(successResponse) 
     ,(errorResponse)-> 
     self.myData = errorResponse 
     q.reject(errorResponse) 
    ) 

    return q.promise 
    return theService 
]) 

.directive('myDirective', ["fetchService", fetchService)-> 
    return { 
    restrict: "A" 
    templateUrl: "/my_template_url" 
    scope: 
     url: '@shopUrl' 
     offset: '@' 
     controller: ($scope, fetchService)-> 
     fetchService.getData($scope.url).success((data) -> 
     $scope.content = data.content 
    ) 
    } 
]) 

이 작업을 시도하면 "정의되지 않은 함수가됩니다."라는 유용한 스택 추적이 없습니다. 어떤 부분이 정의되지 않았는지 확실하지 않습니다. 나는 config()에서 이것을 수행하는 것에 대해 생각해 왔지만, 런타임까지 $ http.get (url)의 url이 무엇인지 알지 못한다. "각도 방식"을하는 데 도움이나 조언을 주시면 감사하겠습니다.

답변

1

fetchService.getData은 약속이 아니고 $q 약속을 반환하므로 '.success'를 호출 할 수 없습니다. 이 필요한

fetchService.getData($scope.url).success((data) -> 

fetchService.getData($scope.url).then((data) -> 
로 변경하기