2014-08-07 3 views
9

Я пытаюсь внедрить услугу в контроллер, и я получаю следующее сообщение об ошибке:

Error: [$injector:unpr] Unknown provider: employeeServiceProvider <- employeeService 
http://errors.angularjs.org/1.3.0-beta.17/$injector/unpr?p0=employeeServiceProvider%20%3C-%20employeeService 
    at http://localhost:9082/angularJSDemo/js/lib/angular.js:78:12 
    at http://localhost:9082/angularJSDemo/js/lib/angular.js:3894:19 
    at Object.getService [as get] 

Вот plunker для кода. Любая помощь будет оценена по достоинству.

+3

Если вы используете angular.module дважды, второй раз, когда вы должны выйти из второго параметра в противном случае он будет перезаписывать модуль. angular.module ("demoApp"). factory() –

+1

Спасибо Зак, вы правы, он работает сейчас. – JavaKB

ответ

17

Вы повторяете angular.module('demoApp', []) везде уберете любые объекты, подключенные к модулю, который уже был добавлен и воссоздает модуль, после инициализации модуля вы должны использовать свою ссылку или просто использовать angular.module('demoApp').service... с помощью этого извлекут модуль, к которому вы может добавить услуги и т.д. ...

var module = angular.module('demoApp', []).controller('employeeController', function($scope, employeeService) { 
    $scope.employees = employeeService.getData(); 
}); 


module.factory('employeeService', function(){ 
    return { 
     getData : function(){ 
      var employees = [{name: 'John Doe', id: '1'}, 
           {name: 'Mary Homes', id: '2'}, 
           {name: 'Chris Karl', id: '3'} 
           ]; 

      return employees; 
     } 
    }; 

}); 

Demo

Quote from Doc: -

Beware that using angular.module('myModule', []) will create the module myModule and overwrite any existing module named myModule. Use angular.module('myModule') to retrieve an existing module.

+1

Плохо, сервис и контроллер находятся в двух разных файлах, когда я копировал плукер, я случайно их вставил в один файл. Я исправил плункер. И я получил свой ответ от Зак Аргайл, спасибо большое. – JavaKB

+1

@JavaKB, конечно, оба ответа, которые я думаю, охватывают все сценарии. 'Angular.module ('DemoApp').' Обслуживания. Это не означает, что '.ervice' может быть только сервисом, он может быть и фабричным. :) Также цитата из документации также достаточно ясна, я думал – PSL

+1

Но, @PSL, что произойдет, если я хочу иметь сервис и контроллер в отдельных файлах? Это невозможно? –

3

Я не знаю, почему вы повторяете создание модуля (demoApp). В строке 6 вы попытались создать модуль demoApp, который является причиной вашей проблемы. Ваш код должен выглядеть следующим образом:

angular.module('demoApp', []) 
.controller('employeeController', function($scope, employeeService) { 
    $scope.employees = employeeService.getData(); 
}) 
.factory('employeeService', function(){ 
    return { 
     getData : function(){ 
      var employees = [{name: 'John Doe', id: '1'}, 
           {name: 'Mary Homes', id: '2'}, 
           {name: 'Chris Karl', id: '3'} 
           ]; 

      return employees; 
     } 
    }; 

}); 

Или

var demoApp=angular.module('demoApp', []) 
.controller('employeeController', function($scope, employeeService) { 
    $scope.employees = employeeService.getData(); 
}); 

demoApp.factory('employeeService', function(){ 
    return { 
     getData : function(){ 
      var employees = [{name: 'John Doe', id: '1'}, 
           {name: 'Mary Homes', id: '2'}, 
           {name: 'Chris Karl', id: '3'} 
           ]; 

      return employees; 
     } 
    }; 

}); 

Вместо

angular.module('demoApp', []).controller('employeeController', function($scope, employeeService) { 
    $scope.employees = employeeService.getData(); 
}); 


angular.module('demoApp', []).factory('employeeService', function(){ 
    return { 
     getData : function(){ 
      var employees = [{name: 'John Doe', id: '1'}, 
           {name: 'Mary Homes', id: '2'}, 
           {name: 'Chris Karl', id: '3'} 
           ]; 

      return employees; 
     } 
    }; 

}); 

Если вы хотите сохранить ваши контроллеры в отдельном файле (это РЕКОМЕНДУЕТСЯ) от службы вы можете рассмотреть что-то вроде этого как ваш abcController.js

angular.module('demoApp', ['demoApp.employeeController']).controller('employeeController', function($scope, employeeService) { 
    $scope.employees = employeeService.getData(); 
}); 

и xyzService.js

angular.module('demoApp.employeeController', []).factory('employeeService', function(){ 
    return { 
     getData : function(){ 
      var employees = [{name: 'John Doe', id: '1'}, 
           {name: 'Mary Homes', id: '2'}, 
           {name: 'Chris Karl', id: '3'} 
           ]; 

      return employees; 
     } 
    }; 

}); 
+1

Плохо, сервис и контроллер находятся в двух разных файлах, когда я копировал в плункер, i случайно вклеили их в один файл. Я исправил плункер. И я получил свой ответ от Зак Аргайл, спасибо большое. – JavaKB

+4

Добро пожаловать. Вы все равно можете сделать одно голосование вверх/вниз, как вы могли бы пожелать. по крайней мере, для усилий – Paullo

Смежные вопросы