3

初めてAngular 1.2.18を使用しています。Rails 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 が実行時までわかりません。これを「角度のある方法」で行うためのヘルプやアドバイスをいただければ幸いです。

4

1 に答える 1

1

fetchService.getData$qpromise ではなく promise を返している$httpため、`.success を呼び出すことはできません。

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

これはに変更する必要があります

fetchService.getData($scope.url).then( (data) ->
于 2014-07-17T22:02:07.647 に答える