假设我们提供以下服务:
myApp.factory('FooService', function () { ...
然后,从控制器,我会说:
myApp.controller('FooCtrl', ['$scope', 'FooService', function ($scope, FooService) { ...
问题分为两部分:
找到了合理的解决方案。将其注入bootstrap方法(运行),并将其添加到根范围。从那里它将对所有控制器和视图可用。
myApp.run(function ($rootScope, $location, $http, $timeout, FooService) { $rootScope.foo = FooService; ....
重新阅读我上面提到的帖子,它没有完全说“包装”……只是“抽象”,所以我认为张贴者指的是相同的解决方案。
为了全面,对(1)的答案为:
myApp.controller('FooCtrl', ['$scope', function ($scope) { // scope inherits from root scope $scope.foo.doSomething(); ...
(2)的答案很简单:
{{doSomething()}}
添加克里斯托弗的评论以确保它被看到:
@rob- 根据最佳实践,应该将工厂注入需要使用它的控制器中,而不是在根范围上。如所问到的,第一个问题实际上是反模式。如果需要工厂100次,则注入100次。最小化时几乎没有任何多余的代码,并且可以很清楚地知道工厂的使用位置,并且通过在功能签名中列出所有必需的工厂,可以更轻松(更明显)地使用模拟方法测试那些控制器。– Christopher WJ Rueber 13年11月25日在20:06