Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将服务注入控制器会引发错误_Javascript_Angularjs_Model View Controller - Fatal编程技术网

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

Javascript 将服务注入控制器会引发错误,javascript,angularjs,model-view-controller,Javascript,Angularjs,Model View Controller,我无法将服务注入控制器。一年前,我能够执行一个类似的代码,但这次我运气不好 app.js 'use strict'; var app = angular.module('product', [ "ngRoute", ]); 'use strict'; app.controller('mainCtrl', ['$scope','$http','srv', function ($scope,$http,srv) { var srvUrl = srv.getSrvUrl; var

我无法将服务注入控制器。一年前,我能够执行一个类似的代码,但这次我运气不好

app.js

'use strict';
var app = angular.module('product', [
  "ngRoute",
]);
'use strict';
app.controller('mainCtrl', ['$scope','$http','srv', function ($scope,$http,srv) {
    var srvUrl = srv.getSrvUrl;
    var data = srv.getData(1,2);
}]);
app.service("srv", function ($http,$scope) {
    this.getSrvUrl = "http://127.0.0.1/api/";
    this.getData = function(a,b) { return a*b; }
});
main.ctrl.js

'use strict';
var app = angular.module('product', [
  "ngRoute",
]);
'use strict';
app.controller('mainCtrl', ['$scope','$http','srv', function ($scope,$http,srv) {
    var srvUrl = srv.getSrvUrl;
    var data = srv.getData(1,2);
}]);
app.service("srv", function ($http,$scope) {
    this.getSrvUrl = "http://127.0.0.1/api/";
    this.getData = function(a,b) { return a*b; }
});
srv.js

'use strict';
var app = angular.module('product', [
  "ngRoute",
]);
'use strict';
app.controller('mainCtrl', ['$scope','$http','srv', function ($scope,$http,srv) {
    var srvUrl = srv.getSrvUrl;
    var data = srv.getData(1,2);
}]);
app.service("srv", function ($http,$scope) {
    this.getSrvUrl = "http://127.0.0.1/api/";
    this.getData = function(a,b) { return a*b; }
});
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>

控制台错误

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)
angular.js:14362
错误:[$injector:unpr]http://errors.angularjs.org/1.6.2/$injector/unpr?p0=%24scopeProvider%20%3C-%20%24scope%20%3C-%20srv
在角上。js:38
在angular.js:4650
在Object.d[as get](angular.js:4803)
在angular.js:4655
在d处(angular.js:4803)
在e(angular.js:4828)
在Object.instantiate(angular.js:4874)
反对。(见J.js:4712)
在Object.invoke(angular.js:4862)
at Object.$get(angular.js:4696)

请帮忙

您不能在服务中注入
$scope

服务是用于共享数据和一些可重用方法的单例对象

应该是这样的

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

您不能在服务中注入
$scope

服务是用于共享数据和一些可重用方法的单例对象

应该是这样的

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

您可以在服务中注入的唯一作用域是
$rootScope
(但是根据您的代码,我不确定您在服务中是否需要作用域)。此外,您可能还希望将服务名称添加为字符串以进行缩小:

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

您可以在服务中注入的唯一作用域是
$rootScope
(但是根据您的代码,我不确定您在服务中是否需要作用域)。此外,您可能还希望将服务名称添加为字符串以进行缩小:

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

我认为不能在服务中注入$scope。尝试删除它是的,这就是问题所在。我认为您不能在服务中注入$scope。试着去掉它是的,这就是问题所在。