javascript - Why can't I inject my service? -


i have following new service:

var signatureservice = function ($scope) {      this.announce = function () {         alert($scope.specificname);     } }; signatureservice.$inject = ['$scope']; 

this declared app follows:

myangularapp.service('signatureservice', signatureservice); 

several other services added app in same way, , seem work ok. have controller declared , defined follows:

myangularapp.controller('mycontroller', mycontroller); ... var mycontroller = function ($scope, service1, service2, $location, $modal, signatureservice) { ... } mycontroller.$inject = ['$scope', 'service1', 'service2', '$location', '$modal', 'signatureservice']; 

i using unconvcentionaly manner of defining servivce , injecting standard in app working on, works existing services, , prefer slot mine in per standard.

when controller loads, [$injector:unpr] in browser console, error info:

$injector/unpr?p0=$scopeprovider <- $scope <- signatureservice 

you can't inject $scope custom service. doesn't make sense since signatureservice can injected anywhere including other services , other controlles. $scope supposed if inject 2 nested controllers, 1 should injected?

scope object ($scope) associated dom node, attached it. that's why see $scope in controllers , directives. , reason why can't have in service: services not related specific dom elements. of course can inject $rootscope unlikely need in question.

summary: $scope created $rootscope , injected in necessary controllers, can't injected custom service.

upd. based on comments want use service define reusable controller methods. in case go call mixin approach. define methods in service , mix them in necessary controllers.

app.service('controllermixin', function() {     this.getname = function() {         alert(this.name);     }; }); 

and extend controller scope angular.extend:

app.controller('onecontroller', function($scope, controllermixin) {     angular.extend($scope, controllermixin);     // define controller specific methods });  app.controller('twocontroller', function($scope, controllermixin) {     angular.extend($scope, controllermixin);     // define controller specific methods }); 

this pretty effective, because controllermixin doesn't have notion of $scope whatsoever, when mixed controller refer scope this. service doesn't change if prefer use controlleras syntax, extend this:

angular.extend(this, controllermixin); 

demo: http://plnkr.co/edit/ephsf8uttr4igeujlrst?p=info


Comments