使用Angular $资源的query(),"未定义不是函数"

mer*_*hop 4 javascript angularjs

所以我正在试验Angular.我创建了以下模块.

var archiveModule = angular.module('archiveModule', ['ngResource']);

archiveModule.factory('Archive', ['$resource',
    function($resource) {
        return $resource('/data/archive/:doc.json', {}, {
            query: { method:'GET', params:{ doc: undefined }, isArray:true }
        });
    }]);

archiveModule.controller('ArchiveControl', ['$scope', '$http', 'Archive',
    function ($scope, Archive) {
        $scope.items = Archive.query();
        $scope.orderProp = 'name';
    }]);
Run Code Online (Sandbox Code Playgroud)

我的模板一切都发生在:

<div class="container" ng-app="archiveModule">
    <div ng-controller="ArchiveControl">
Run Code Online (Sandbox Code Playgroud)

我在页面底部包含了角度脚本:

<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.12/angular.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.12/angular-resource.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.12/angular-route.js"></script>
Run Code Online (Sandbox Code Playgroud)

Chrome报道TypeError: undefined is not a function,它又回归了$scope.items = Archive.query();.

根据http://docs.angularjs.org/api/ngResource.$ resource,查询是$ resource的一部分,我模拟了我的资源http://docs.angularjs.org/tutorial/step_11我不知道是什么这里出错了.

Ant*_*Chu 9

您的参数不符合声明的依赖项.它注射$httpArchive...

archiveModule.controller('ArchiveControl', ['$scope', '$http', 'Archive',
    function ($scope, Archive) {
Run Code Online (Sandbox Code Playgroud)

删除'$http'它应该工作......

archiveModule.controller('ArchiveControl', ['$scope', 'Archive',
    function ($scope, Archive) {
        $scope.items = Archive.query();
        $scope.orderProp = 'name';
    }]);
Run Code Online (Sandbox Code Playgroud)

  • Angular查看参数名称以确定要注入的依赖项.这很有效......直到脚本通过minifier运行并且参数名称全部被破坏.因此,它们允许在上面的数组中声明依赖项.发生这种情况时,它会忽略参数名称并严格按照数组中的字符串名称进行操作.缺点是很容易失去同步,就像你在这里发现的那样.:) (3认同)