невозможно получить экземпляр службы из $ injector.get () с зависимостями - PullRequest
0 голосов
/ 05 сентября 2018

Мой вопрос является расширением задаваемого вопроса, ссылка дана ниже

не может получить экземпляр службы от $ injector.get ()

var app = angular.module('myDI', []);
app.config(function($provide){
    $provide.provider('greeting',function(){
        this.$get = function(){
             return function(name) {
                 console.log("Hello, " + name);
            };
        };
    });
});

мы можем получить экземпляр службы, используя приведенный ниже код.

var injector = angular.injector(['myDI', 'ng']); //Add this line
var greeting = injector.get('greeting');
greeting('Ford Prefect');
var injector = angular.injector();

Но если я добавлю зависимости в Service, как ...

var app = angular.module('myDI', []);
    app.config(function($provide){
        $provide.provider('greeting',['$http','$q' function($http,$q){
            this.$get = function(){
                 return function(name) {
                     console.log("Hello, " + name);
                };
            };
        });
    });

как мы получим экземпляр сервиса с использованием углового инжектора.

Большое спасибо.

1 Ответ

0 голосов
/ 05 сентября 2018

Здесь много всего:

  • вы не можете внедрять услуги на уровне определения поставщика. Они зависят только от того, что определено с помощью angular.const и angular.config (и, может быть, чего-то большего, я больше не помню). Таким образом, вы не можете ввести $ http или $ q таким образом.
  • если вы хотите внедрить сервисы в сервисе yoru, вы должны внедрить их на уровне определения фабрики ($ get)
  • для простоты не определяйте вашего провайдера в вашей конфигурации
  • $ http или $ q не входят в модуль по умолчанию. Чтобы получить доступ к этим службам, вы должны импортировать модуль 'ng', который их содержит.

Вот исправленное, по которому я добавил способ настройки вашего провайдера. Вы можете получить к нему доступ на этом плунжере: http://jsbin.com/yajomecoxi/edit?js,console

var app = angular.module('myDI', ['ng']);

app.provider('greeting',function(){
  var greetingToUser="Hello, ";
  this.setGreeting=function(greet){
    greetingToUser=greet;
  }
  this.$get = ['$http', '$q', function($http, $q){
    return function(name) {
      console.log(greetingToUser + name);
    };
  }];
});


app.config(['greetingProvider',function(greetingProvider){
  greetingProvider.setGreeting("welcome to you ");
}])


var $injector = angular.injector(['myDI']);
var greeting = $injector.get('greeting');
greeting("sfgsdfg");

см. Дополнительную информацию по этим ссылкам:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...