2014-11-19 4 views
0

Я столкнулся с проблемой ввода службы из модуля углового js в мой главный контроллер. Я получаю эту ошибку:? https://docs.angularjs.org/error/ $ инжекторов/unpr p0 = aProvider% 20% 3C-% 20a% 20% 3C-% 20solrqueryУгловой JS Service DI от другого модуля

Мой код ниже:

var app = angular.module('app1',[ 
    'solr' 
    ]); 

app.controller('app1cont', ['$scope', 'solrquery', function($scope,solrquery){ 
    console.log("Start"); 
    $scope.value = 1; 
    solrquery('aaa'); 

}]); 

Модуль Solr выглядит это:

var solr1 = angular.module('solr', []); 

solr1.run(function(){ 
    console.log("Module Loaded"); 
}); 

solr1.service('solrquery',function(a) { 
    console.log('searching for: ' + a); 
} 
); 

Когда я запустил его, я вижу, что загруженный модуль напечатан на консоли и ошибка. Если я удалю инъекцию из app.controller и solrquery ('aaa'); код работает отлично ... потратил несколько часов на это уже, любая помощь была бы высоко оценена.

Заранее спасибо.

EDIT:

Благодаря Энтони за ответ, после повторного работает код, модуль выглядит следующим образом:

var solr1 = angular.module('solr', []); 

solr1.run(function(){ 
    console.log("Module Loaded"); 
}); 
//as a factory 
solr1.factory('solrquery',function() { 
    return function(a) { 
     console.log('searching for: ' + a); 
    } 
} 
); 
//as a service 
solr1.service('solrser', function() { 
    this.test = function(a) { 
     console.log(a); 
    } 
}); 

и контроллер: уага приложение = angular.module (» app1 ', [ ' solr ' ]);

app.controller('app1cont', ['$scope', 'solrquery', 'solrser', function($scope,solrquery,solrser){ 
    console.log("Start"); 
    $scope.value = 1; 
    solrquery('a'); 
    solrser.test('a'); 

}]); 

ответ

1

Инжектор жалуется, что ищет что-то под названием a для ввода в эксплуатацию. Вы можете это исправить, изменив solrquery на фабрике, которая возвращает функцию ...

solr1.factory('solrquery', function() { 
    return function (a) { 
     console.log('searching for: ' + a); 
    }; 
}); 

Live Demo

Обратите внимание, что оставить его в качестве службы технически все еще работает, но функция, которая возвращает что-то должно быть действительно завод.

+0

Привет Энтони, спасибо, я получил рабочий пример. Однако, можете ли вы сказать мне, как добавить сервис из другого модуля? Я могу использовать службы DI, объявленные на уровне приложения, а не из модуля. Еще раз спасибо – browskie

+0

неважно, понял. – browskie

0

Эта ссылка об ошибке angularjs.org сообщает вам, в чем проблема.

Unknown provider: aProvider <- a <- solrquery

форсунка ANGULAR является ищет зависимость называется a, который указан в параметрах функции для solrquery службы:

solr1.service('solrquery',function(a) {

Ваше определение услуг должно быть переработаны. Это хорошая справочная информация о том, как вы должны определять услуги: angular.service vs angular.factory.

+0

Я знаю, что нужно было переделать, я просто не знал, как это сделать. Указание очевидного без выполнения шагов по исправлению просто загромождает сообщение. – browskie

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