现在和Angular一样,已经有6到7个月了,而且我获得的知识并不多。但是从过去的一天开始,我就陷入了这个错误,如下所示:
错误:[$ injector:undef]
http://errors.angularjs.org/1.6.5/ $注射器/是undef?P0 = DataService的
堆栈追踪:K /< @ http://localhost:64965/Scripts/angular.min.js:7:76
以下是我的服务代码:
(function () {
var DataService = function ($http) {
var allItems = function () {
return $http.get("./data/myData.json").then(function (serviceResp) {
return serviceResp.data;
});
};
};
app.factory("DataService", ["$http", DataService]);
}());
以下是我的控制器代码:
(function () {
var ItemController = function ($scope, DataService) {
var allItems = function (data) {
$scope.collection = data;
};
};
app.controller("ItemController", ["$scope", "DataService", ItemController])
}());
工厂正在返回对象,但我仍然遇到上述错误。我尝试多次清理缓存并多次重启应用程序。
答案 0 :(得分:0)
您编写服务的方式是错误的。
应该用以下方式编写:
var app = angular.module('ServiceExample',[]);
var serviceExampleController =
app.controller('ServiceExampleController', ServiceExampleController);
var serviceExample = app.service('NameOfTheService', NameOfTheService);
ServiceExampleController.$inject = ['NameOfTheService'] //protects from minification of js files
function ServiceExampleController(NameOfTheService){
serviceExampleController = this;
serviceExampleController.data = NameOfTheService.getSomeData();
}
function NameOfTheService(){
nameOfTheService = this;
nameOfTheService.data = "Some Data";
nameOfTheService.getSomeData = function(){
return nameOfTheService.data;
}
}
然后在HTML中你可以使用它:
<div ng-controller = "ServiceExampleController as serviceExample">
{{serviceExample.data}}
</div>
如果您希望使用factory
阅读this post。
答案 1 :(得分:0)
工厂必须返回值/ obj。你没有回来任何东西。我没有测试过,但它应该可以工作。
(function () {
var DataService = function ($http) {
var allItems = function () {
return $http.get("./data/myData.json").then(function (serviceResp) {
return serviceResp.data;
});
};
return allItems ;
};
app.factory("DataService", ["$http", DataService]);
}());