AngularJS - 配置服务和$ routeProvider

时间:2012-11-05 20:12:22

标签: javascript angularjs

这是一个非常虚拟的问题,但我无法弄清楚。我有一些简单的模块,配置如下:

var synergy_module = angular.module('synergy', [])
    .config(function($provide, $routeProvider) {
$routeProvider.when('/s/:id', {templateUrl: 'partials/...', controller: SpecPoolCtrl});
$routeProvider.when('/s', {templateUrl: 'partials/...', controller: SpecPoolCtrl});
$provide.factory('foo', function(){return 1;});    
});

现在在SpecPoolCtrl:

function SpecificationCtrl($scope, foo,$http, $location, $routeParams) {
   window.console.log($scope.foo());
   ...
}

当我运行此代码时,我正在

TypeError: Object #<Object> has no method 'foo'
at new SpecificationCtrl (app/js/controllers.js:373:31)
at invoke (app/lib/angular/angular.js:2795:28)
at Object.instantiate (app/lib/angular/angular.js:2805:23)
at $get (app/lib/angular/angular.js:4621:24)
你能帮我解决什么问题吗?或者一些相关的例子如何让它发挥作用?

1 个答案:

答案 0 :(得分:1)

你应该像

一样使用它
$provide.factory('foo', function(){
  return 1;
});

function SpecificationCtrl($scope, foo,$http, $location, $routeParams) {
    console.log(foo);
   ...
}

这是因为foo未在您的SpecificationCtrl $scope中定义,它正在被注入,因此您可以通过编写foo来使用它,如上所述。

此外,如果您要缩小代码,请考虑注入数组语法。

以下是plunker