AngularJS $http.get 返回未定义并且 $http() 不是一个函数

7
我正在使用AngularJS构建一个应用程序,用于动态加载和显示来自数据库的数据,但是当我尝试访问我的API(使用$http()或$http.get())时,会收到错误信息。 $http.get() 错误: TypeError: undefined is not a function, $http() 错误: TypeError: object is not a function 这个特定的错误发生在动态加载导航选项卡的代码中。
两者的CoffeeScript代码如下:
p4pControllers.controller 'navCtrl', [
    '$routeParams'
    '$scope'
    '$http'
    ($http,$scope,$routeParams) ->
        $http(
        method:'GET'
        url:'http://p4p-api.snyx.nl/tables'
    ).success (data) ->
        $scope.tabs = data
        return
    return

    $http.get('http://p4p-api.snyx.nl/tables').success (data) ->
       $scope.tabs = data
       return
    return
]

有人看到我这里做错了什么吗?

1个回答

9
当使用数组标记来注入依赖项时,参数的顺序很重要:
在您的代码中:
['$routeParams',
 '$scope',
 '$http',
 function ($http, $scope, $routeParams)  {
    // $http argument        ==> $routeParams
    // $scope argument       ==> $scope (by coincidence)
    // $routeParams argument ==> $http
}

所以,基本上你正在执行$routeParams.get(),但$routeParams没有get()方法(也不是函数本身)。

啊,哇,我没有想到那个。谢谢!接受你的答案。 - RogerCapiche
1
这就是数组表示法的关键所在:作为参数传递的对象与参数名称无关,因为参数名称最终会被缩小器混淆。由参数表示的对象仅取决于数组相应索引处的字符串(该字符串不会被缩小)。 - gkalpak
啊,是的,这很有道理。我习惯于服务器端和低级编程,所以需要一些时间来适应。谢谢你的帮助 :) - RogerCapiche
1
顺便提一下,内联数组注释不是唯一的方法 :) 您可以使用“常规”参数和按参数名称的 DI,但必须使用特殊、了解 Angular 的缩小程序(例如 ngmin;但也有其他工具)。 - gkalpak
这也帮助了我! :) - Brendan W

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接