依赖注入地狱,期望什么?
Dependency injection hell, what is expected?
我正在尝试将组件分成几个文件以用于一个简单的应用程序,但是 angular 的依赖注入器让我很头疼,我真的不知道期望的是什么。
Unknown provider: servicesProvider <- services <- maincontroller
是我遇到的错误。
app.js
//Application definition with injected dependencies
var app = angular.module('leadcapacity', ['services', 'utils', 'customfilters', 'controllers']);
services.js
var services = angular.module('services', []);
services.service('xrmservice',
[
'$http', function($http) {
var oDataUrl = Xrm.Page.context.getClientUrl() + '/XRMServices/2011/OrganizationData.svc/';
var service = {};
service.query = function(entitySet, query) {
return $http.get(oDataUrl + entitySet + '?' + query);
};
return service;
}
]);
controllers.js
var ctrls = angular.module('controllers', ['utils', 'services']);
ctrls.controller('maincontroller',
function ($scope, services, utils) {
};
});
以及 index.html
中的包含顺序
<script src="service.js"></script>
<script src="controllers.js"></script>
<script src="app.js"></script>
我觉得不错。我知道这可能不是组织事物的最佳方式,但先获得 "Hello world" 会很好。
谢谢。
Error message appearing in console clearly says that, services
dependency isn't exists in the module.
您在 maincontroller
控制器工厂函数中注入了错误的服务名称,基本上您试图注入 services
(模块名称) 而不是 xrmservice
(服务名称)
function ($scope, services, utils) {
应该是
function ($scope, xrmservice, utils) {
额外
请遵循 DI 的内联数组注释,因为您已经在 xrmservice
服务 JS 文件中使用了相同的注释,这样将来当您遇到 javascript 缩小相关问题。
控制器
ctrls.controller('maincontroller', [ '$scope', 'xrmservice', 'utils',
function ($scope, xrmservice, utils) {
//code goes here
//....
};
}]);
虽然你已经将它们注入到模块中,但你需要将它们提供给函数,这样你才能使用注入的模块
ctrls.controller('maincontroller',
['$scope', 'services', 'utils', function ($scope, services, utils) {
};
}]);
我正在尝试将组件分成几个文件以用于一个简单的应用程序,但是 angular 的依赖注入器让我很头疼,我真的不知道期望的是什么。
Unknown provider: servicesProvider <- services <- maincontroller
是我遇到的错误。
app.js
//Application definition with injected dependencies
var app = angular.module('leadcapacity', ['services', 'utils', 'customfilters', 'controllers']);
services.js
var services = angular.module('services', []);
services.service('xrmservice',
[
'$http', function($http) {
var oDataUrl = Xrm.Page.context.getClientUrl() + '/XRMServices/2011/OrganizationData.svc/';
var service = {};
service.query = function(entitySet, query) {
return $http.get(oDataUrl + entitySet + '?' + query);
};
return service;
}
]);
controllers.js
var ctrls = angular.module('controllers', ['utils', 'services']);
ctrls.controller('maincontroller',
function ($scope, services, utils) {
};
});
以及 index.html
<script src="service.js"></script>
<script src="controllers.js"></script>
<script src="app.js"></script>
我觉得不错。我知道这可能不是组织事物的最佳方式,但先获得 "Hello world" 会很好。
谢谢。
Error message appearing in console clearly says that,
services
dependency isn't exists in the module.
您在 maincontroller
控制器工厂函数中注入了错误的服务名称,基本上您试图注入 services
(模块名称) 而不是 xrmservice
(服务名称)
function ($scope, services, utils) {
应该是
function ($scope, xrmservice, utils) {
额外
请遵循 DI 的内联数组注释,因为您已经在 xrmservice
服务 JS 文件中使用了相同的注释,这样将来当您遇到 javascript 缩小相关问题。
控制器
ctrls.controller('maincontroller', [ '$scope', 'xrmservice', 'utils',
function ($scope, xrmservice, utils) {
//code goes here
//....
};
}]);
虽然你已经将它们注入到模块中,但你需要将它们提供给函数,这样你才能使用注入的模块
ctrls.controller('maincontroller',
['$scope', 'services', 'utils', function ($scope, services, utils) {
};
}]);