我正在使用AngularJS。 我想让一个控制器使用第一个使用另一个工厂的工厂。
它可以是那样的模式:
MyCtrl -> Factory1 -> Factory2
所以我尝试用3个不同的文件(按以下顺序加载):
Factory2.js
app.factory('Factory2', function () { ... })
Factory1.js
app.factory('Factory1',['Factory2', function (Factory2) { ... })
controller.js
app.controller('MyCtrl',['$scope', 'Factory1', function ($scope, Factory1) { ... })
在我的HTML中,我有:
<script src="services/factory2.js" type="text/javascript"></script>
<script src="services/factory1.js" type="text/javascript"></script>
<script src="controllers/controller.js" type="text/javascript"></script>
但它不起作用,我有这个错误Unknown provider: Factory2Provider <- Factory2 <- Factory1
我的代码出了什么问题?我错过了什么吗?
答案 0 :(得分:3)
您可以重构代码并使用模块,这样您就不需要使用$ inject
了var app = angular.module('app', ['factories', 'mymodule']);
angular.module('factories', [])
.factory('Factory2', function () { })
.factory('Factory1', ['Factory2', function (Factory2) {
return myCustomFunction = function () {
alert('todo');
}
}]);
angular.module('mymodule', [])
.controller('MyCtrl', ['$scope', 'Factory1', function ($scope, Factory1) {
$scope.text = "testing";
}])
答案 1 :(得分:0)
为什么不使用 $ inject 进行显式注入?这是一种更好的方法,因为它可以让您更好地控制依赖关系。例如:
userController.js
function userController (model, routeParams, searchService) {
//implementation
}
userController.$inject = ['$scope', '$routeParams', 'searchService'];
app.controller("userController", userController);
searchService.js
var searchService = function (http, log) {
//implementation
}
searchService.$inject = ["$http", "$log"];
app.factory("searchService", searchService);
这篇文章可能有用:Explicit Dependency Injection