Javascript 在angularJS中使用工厂方法时,“未定义”不是函数错误

Javascript 在angularJS中使用工厂方法时,“未定义”不是函数错误,javascript,angularjs,angularjs-service,angularjs-routing,Javascript,Angularjs,Angularjs Service,Angularjs Routing,我在寻找TypeError的解决方案时遇到问题:未定义在我的代码中不是函数。 我有以下app.js: var app = angular.module('test', ['ngRoute', 'test.services', 'test.directives', 'test.controllers']); app.config(function ($routeProvider, $httpProvider, $locationProvider) { $locationProvider.h

我在寻找
TypeError的解决方案时遇到问题:未定义在我的代码中不是函数。
我有以下app.js:

var app =  angular.module('test', ['ngRoute', 'test.services', 'test.directives', 'test.controllers']);
app.config(function ($routeProvider, $httpProvider, $locationProvider) {

  $locationProvider.html5Mode(true);

  $routeProvider.
    when('/q/:q', {
      templateUrl: '/templates/productlist.html',
      controller: 'ProductCtrl'
    }).
    otherwise({
      redirectTo: '/q'
    });

});
然后我有一个控制器

var controllers = angular.module('test.controllers', []);
controllers.controller('ProductCtrl', ['$scope', '$routeParams', 'ProductFactory',
  function ($scope, ProductFactory, $routeParams) {

    $scope.query = $routeParams.q;
    $scope.products = ProductFactory.query({query: $scope.query});
  }]);
还有一个工厂

var services = angular.module('test.services', ['ngResource']);
var baseUrl = 'http://localhost\\:8080';
services.factory('ProductFactory', function ($resource) {
    return $resource(baseUrl + '/test/smart/:query', {}, {
        query: { method: 'GET', isArray: true }
    })
});
此代码在加载时在
$scope.products=ProductFactory.query({query:$scope.query})行导致上述TypeError在我的控制器中。
此外,在调试代码时,我看到
$routeParams.q
为null或未定义。 我想要的是,在我的控制器中,
$scope.products
变量将成为一个带有查询结果的数组


我做错了什么?

请尝试使用正确的函数参数

controllers.controller('ProductCtrl', ['$scope', '$routeParams', 'ProductFactory',
  function ($scope /*ProductFactory*/, $routeParams, ProductFactory) {

    $scope.query = $routeParams.q;
    $scope.products = ProductFactory.query({query: $scope.query});
  }]);

是的,很有效,非常感谢!然而,我不明白为什么参数的顺序很重要?@PieterDB:这就是DI中内联数组表示法的全部要点(参数的名称是无关的,只是位置是无关的)。看一看。