在angularjs中使用工厂获取错误:[$injector:undef]

在angularjs中使用工厂获取错误:[$injector:undef],angularjs,factory,angular-services,Angularjs,Factory,Angular Services,我正在创建一个新的angular应用程序并使用factory,但当我遇到一个错误时 错误:[$injector:undef]$injector/undef?p0=数据 错误(本机) 在 at对象。$get() 在Object.e[作为调用]() 在 在d() 在e() 在Object.g.实例化() b.$get() 在s() var app=angular.module('testapp',['ngRoute']); app.config(['$routeProvider', 函数($rout

我正在创建一个新的angular应用程序并使用factory,但当我遇到一个错误时

错误:[$injector:undef]$injector/undef?p0=数据 错误(本机) 在 at对象。$get() 在Object.e[作为调用]() 在 在d() 在e() 在Object.g.实例化() b.$get() 在s()

var app=angular.module('testapp',['ngRoute']); app.config(['$routeProvider', 函数($routeProvider){ $routeProvider。 当(“/userlist”{ 标题:“所有用户的列表”, templateUrl:'userlist.html', 控制器:“listuser” }) 。当(“/profile”{ 标题:“用户详细信息页”, templateUrl:'profile.html', 控制器:'listuser' }) .否则({ 重定向到:'/userlist' }); }]) app.factory(“数据”[“$http”,“$log”, 函数($http,$log){ var obj={}; obj.post=函数(q,对象){ 返回$http({ 方法:“POST”, url:'userdetail.php', 数据:object.user }) .然后(函数(结果){ $log.log(结果); 返回结果和数据; }); }; }]); app.controller('listuser',['Data',函数($scope,$http,$log,$window,Data){ $scope.userdetail={}; var init=函数(){ $http({ 方法:“POST”, url:'apisource.php', }) .然后(函数(结果){ $scope.data=results.data; }); }; init(); $scope.douserdetail=函数(用户){ Data.post({ 用户:用户 }).然后(函数(结果){ 如果(results.status==“success”){ //$location.path('dashboard'); } }); }; }]); 请查看stacktrace中提供的。您的工厂必须返回一个值:

app.factory("Data", ['$http','$log',
  function ($http,$log) {
    var obj = {};
    ...
    return obj;
  }]);    

angular中的Factory函数应该返回一个对象,但是您的
“Data”
工厂不会返回任何内容。只需在factory函数末尾添加以下内容即可解决此问题:

return obj;

有很多错误,在您的控制器中使用$http,目的是什么

您正在init内调用init(),这将导致无限循环

您的服务不返回任何内容


我建议首先检查基本角度

尝试在您的视图中返回
obj
对象factory@DomasMar现在它说的是TypeError:$http不是init(app.js:44)在new(app.js:55)在e(angular.js:4473)在Object.g.instantiate(angular.js:4481)在b.$get(angular.js:9108)在s的函数(angular route.min.js:12)在m.a.$get.m.$broadcast(angular.js:16200)在angular route.min.js:9在angular.js:14634在m.a.$get.m.$eval(angular.js:15878)啊..是的。看看你的控制器。你忘了注入
$scope,$http,$log,$window
dependencies@DomasMar我需要注入控制器中的所有依赖项吗?看到您在过去几周中提出的其他问题,我不禁看到您忽略了基本问题。您在其他问题中犯了同样的错误,并且很明显ly没有从给出的答案中学到什么。我认为这里最好的建议是遵循angularjs的一些基本介绍,并尝试理解概念(不要只是复制代码)。现在它说的是TypeError:$http在init(app.js:44)在new(app.js:55)在e(angular.js:4473)在Object.g.instantiate不是函数(angular.js:4481)在b$get(angular.js:9108)在s(angular route.min.js:12)在m.a$get.m.$broadcast(angular.js:16200)在angular.js:9在angular.js:14634在m.a$get.m.$eval(angular.js:15878)这是另一个错误。您需要正确指定
'listuser'
控制器的依赖项列表(您仅定义对“数据”服务的依赖项)。如下所示:
app.controller('listuser'、['$scope'、'$http'、…,'Data',function($scope、$http、$log、$window、Data){…
| | |首先,您基本上需要告诉angular将
$http
(和其他服务)注入控制器中我正在学习我自己,我按照你的建议理解angular services是如何工作的,我自己解决了它们现在我有一个概念问题。我最初发出http请求,然后调用服务函数。但我的问题是调用服务函数时(因为它们在同一个控制器中)它被调用了,但之后它也调用了初始函数。我的数据没有得到更新。请帮助我。非常感谢,因为我是一个非常初学者,非常渴望学习。@GauravkumarMVCExpert,以防您不熟悉StackOverflow的工作原理-它不是一个论坛,它是一个问答网站。如果您有新的问题,请打开一个n新问题,我们无法通过评论中的讨论来解决所有问题。此外,不要忘记对您认为有用的答案进行投票/接受,这有助于为未来读者对答案进行评级。
return obj;