简体   繁体   English

将服务注入控制器会引发错误

[英]Injecting service into controller throws error

I am unable to inject service into controller. 我无法将服务注入控制器。 I was able to execute a similar code a year ago and it worked but this time I am having a hard luck. 一年前,我能够执行类似的代码,并且可以正常工作,但是这次我很不幸。

app.js app.js

'use strict';
var app = angular.module('product', [
  "ngRoute",
]);

main.ctrl.js main.ctrl.js

'use strict';
app.controller('mainCtrl', ['$scope','$http','srv', function ($scope,$http,srv) {
    var srvUrl = srv.getSrvUrl;
    var data = srv.getData(1,2);
}]);

srv.js srv.js

app.service("srv", function ($http,$scope) {
    this.getSrvUrl = "http://127.0.0.1/api/";
    this.getData = function(a,b) { return a*b; }
});

index.html index.html

<!--JS-->
<script type="text/javascript" src="bower_components/angular/angular.min.js"></script>
<!--APP-->
<script type="text/javascript" src="app/app.js"></script>
<!-- ROUTE -->
<script type="text/javascript" src="bower_components/angular-route/angular-route.min.js"></script>
<script type="text/javascript" src="app/routes/app.route.js"></script>
<!-- SERVICE -->
<script type="text/javascript" src="app/services/srv.js"></script>
<!--CONTROLLER-->
<script type="text/javascript" src="app/controllers/main.ctrl.js"></script>

console error 控制台错误

angular.js:14362 
Error: [$injector:unpr] http://errors.angularjs.org/1.6.2/$injector/unpr?p0=%24scopeProvider%20%3C-%20%24scope%20%3C-%20srv
at angular.js:38
at angular.js:4650
at Object.d [as get] (angular.js:4803)
at angular.js:4655
at d (angular.js:4803)
at e (angular.js:4828)
at Object.instantiate (angular.js:4874)
at Object.<anonymous> (angular.js:4712)
at Object.invoke (angular.js:4862)
at Object.$get (angular.js:4696)

Please help. 请帮忙。

You can not inject $scope in service. 您不能在服务中注入$scope

Service are singleton object used to share data and some reusable methods. 服务是用于共享数据的单例对象和一些可重用的方法。

It should be like this 应该是这样

app.service("srv", function ($http, $scope) {
    return {
        getSrvUrl: "http://127.0.0.1/api/",
        getData: function (a, b) { return a * b; }
    }
});

The only scope you can inject in a service is $rootScope (but given your code, I'm not sure you need a scope at all in the service). 您可以在服务中注入的唯一作用域是$rootScope (但是鉴于您的代码,我不确定您在服务中根本不需要作用域)。 Also, you'll probably want to add the service names as strings for minification: 另外,您可能希望将服务名称添加为字符串以进行缩小:

app.service("srv", ['$http', '$rootScope', function ($http, $rootScope) {
    // ...
}]);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM