我有一个像这样定义的控制器:
angular.module('myApp')
.controller 'DetailController', ($rootScope, $scope, $routeParams, apiService) ->
onStart = () ->
getData()
getOtherData()
# a bunch of other functions defined here
getData = ->
apiService.get('/detail/' + $routeParams.id).then (result) ->
$scope.data = result.data # really a little bit more involved :)
onStart()
这很有效。
现在,我想在otherService
函数中使用一些getData()
来做额外的事情。我们假设otherService
被定义为
angular.module('myApp')
.factory 'otherService', () ->
doTheThing = -> console.log('did the thing!')
{
doTheThing
}
(这适用于应用程序的其他部分)。
要在我的控制器中使用它,我这样做:
angular.module('myApp')
.controller 'DetailController', ($rootScope, $scope, $routeParams, apiService, otherService) ->
onStart = () ->
getData()
getOtherData()
# a bunch of other functions defined here
getData = ->
apiService.get('/detail/' + $routeParams.id).then (result) ->
$scope.data = result.data # really a little bit more involved :)
otherService.doTheThing()
onStart()
即。在参数列表的末尾添加一个参数otherService
,然后使用它。
这为我TypeError
提供了doTheThing
因为otherService
未定义。调试时,我发现false
包含值{{1}}而不是我请求的服务。
为什么?
答案 0 :(得分:1)
我不太喜欢Coffeescript,但是当我使用以下代码转换代码时:尝试Coffeescript(http://coffeescript.org/),我得到了:
angular.module('myApp').factory('otherService', function() {
var doTheThing;
doTheThing = function() {
return console.log('did the thing!');
};
return {
doTheThing: doTheThing
};
});
angular.module('myApp').controller('DetailController', function($rootScope, $scope, $routeParams, apiService, otherService) {
var getData, onStart;
onStart = function() {
getData();
return getOtherData();
};
getData = function() {
return apiService.get('/detail/' + $routeParams.id).then(function(result) {
$scope.data = result.data;
return otherService.doTheThing();
});
};
return onStart();
});
我不确定是否返回onStart - 因为Controller应该是普通的构造函数,但不要介意我尝试使用jsbin并删除$ q.when的未满足的依赖项并且它可以工作。
http://jsbin.com/cubekojuwu/edit?js,console,output
关于工厂的主要事情是它应该返回应放入DI容器的对象,并且您的代码看起来不错。 所以我认为你的问题出现在我们无法看到的地方。
你能提供完整的"不工作" jsbin?您可以将已编译的代码放入其中。