角度承诺在服务中的反应问题

时间:2014-07-17 21:54:24

标签: javascript ruby-on-rails angularjs coffeescript angular-promise

我第一次使用角度1.2.18。我正在使用rails 3.2和coffeescript。我试图在服务中使用promise来获取一些我将用于填充模板的数据。我的代码如下所示:

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
      )
  }
])

当我尝试这样做时,我得到" undefined不是一个功能"并没有有用的堆栈跟踪。我不确定哪个部分未定义。我曾考虑在config()中执行此操作,但我不知道$ http.get(url)中的url是什么,直到运行时。任何关于这样做的帮助或建议"棱角分明的方式"将不胜感激。

1 个答案:

答案 0 :(得分:1)

fetchService.getData正在返回$q承诺,而不是$http承诺,因此您无法调用`.success。

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

这需要更改为

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