2014-02-14 2 views
4

Так что я экспериментирую с 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'; 
    }]); 

Мой шаблон все происходит в пределах:

<div class="container" ng-app="archiveModule"> 
    <div ng-controller="ArchiveControl"> 

I включают угловые скрипты в нижней части моей страницы:

<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> 

И сообщает TypeError: undefined is not a function Chrome, и она восходит к line $scope.items = Archive.query();.

Согласно http://docs.angularjs.org/api/ngResource. $ Ресурс, запрос является частью $ resource, и я смоделировал свой ресурс http://docs.angularjs.org/tutorial/step_11. Я не уверен, что здесь происходит не так.

ответ

9

Ваши параметры не совпадают с объявленными зависимостями. Это инъекционного $http в Archive ...

archiveModule.controller('ArchiveControl', ['$scope', '$http', 'Archive', 
    function ($scope, Archive) { 

Удалить '$http' и он должен работать ...

archiveModule.controller('ArchiveControl', ['$scope', 'Archive', 
    function ($scope, Archive) { 
     $scope.items = Archive.query(); 
     $scope.orderProp = 'name'; 
    }]); 
+0

Спасибо за это! что это, кстати, почему это мешает ему работать? Это затенение «Архив» или что-то еще? – mercifulhop

+3

Угловой взгляд на имена параметров, чтобы определить, какие зависимости нужно вводить. Это отлично работает ... пока скрипт не запускается через мини-файл, а имена параметров не будут искажены. Поэтому они позволяют объявлять зависимости в массиве, как указано выше. Когда это происходит, оно игнорирует имена параметров и строго соответствует именам строк в массиве. Недостатком является то, что легко выйти из синхронизации, как вы узнали здесь. :) –

Смежные вопросы