2017-07-07 83 views
0

我無法將服務注入控制器。一年前我能夠執行一個類似的代碼,但是這次我運氣很好。向控制器注入服務拋出錯誤

app.js

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

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

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) 

請幫助。

+0

我認爲您無法在服務中注入$ scope。嘗試刪除該 – anand

+0

是的,這是問題。 –

回答

2

您不能在服務中注入$scope

服務是用於共享數據和一些可重用方法的單例對象。

它應該是這樣的

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

你可以在服務注入的唯一範圍$rootScope(但鑑於你的代碼,我不知道你需要一個範圍,在所有的服務)。此外,您可能想要將服務名稱添加爲縮小字符串:

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

感謝您的回答。這是問題所在。 –

+0

@AtulSaxena此答案被接受嗎? –