2012-11-05 85 views
1

這是一個相當虛擬的問題,但我無法弄清楚。我有一些簡單的模塊,配置是這樣的:

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

你應該使用它像

$provide.factory('foo', function(){ 
    return 1; 
}); 

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

這是因爲foo沒有在你的SpecificationCtrl $scope定義,它被注入,因此您可以通過上述只是寫foo使用它。另外,如果您要縮小代碼,請考慮注入數組語法。

這裏是plunker

+0

:d我不能相信它是如此簡單的錯誤。謝謝 – ladar

+0

它發生了:)歡迎您! – maxisam