0

У меня есть угловой модуль, который предназначен для автономного использования. Это приложение-потребитель может добавить директивы с параметром url, и он будет использовать этот URL-адрес, поскольку это общий источник данных при взаимодействии с виджетами. У этого есть общий LoadService, который использует $ http для загрузки данных и ожидает, что определенный JSON-формат будет запускать виджет.Как вы заказываете сервис состояния в контроллер AngularJS 1

Ну, сейчас я пытаюсь реорганизовать так, чтобы кто-то также мог создать пользовательскую службу загрузки и вставить ее в модуль, но если он не будет введен, он будет использовать нагрузку по умолчанию. Поэтому я пытаюсь понять, как я могу создать способ, которым CustomLoadService вводится, если он определяется приложением, которое потребляет модуль. Однако не следует выходить из строя, если пользовательская служба не определена, она должна просто использовать службу по умолчанию.

Я смотрел на $injector.get и видел это как возможность, но у меня возникли проблемы с вводом $injector в контроллер. Я думал, что это будет так просто, как $location для инъекций. Что-то вроде ...

angular 
    .module('Widget') 
    .controller('WidgetController',[ 
    '$scope', 
    'WidgetLoadService', 
    '$injector', 
    WidgetController 
    ]); 

не кажется, этот метод работать так, я задаюсь вопросом ... Что такое лучший самый «угловой путь», чтобы решить эту проблему. Как я должен использовать $ injector.

ответ

0

Вы можете использовать $ форсунку:

app.controller('MainCtrl', function($scope, $injector) { 
    $scope.name = $injector.get('test').name; 
}).factory('test', function() { return {name: 'world'} }); 

Таким образом, вы можете иметь что-то вроде этого, как результат:

app.controller('MainCtrl', function($scope, shareService) { 
    $scope.name = shareService.getData(); 

    shareService.setDataService('dataService2'); 

    $scope.name = shareService.getData(); 
}) 

.factory('shareService', function($injector) { 
    var dataServiceName; 

    return { 
    setDataService: function(name) { 
     dataServiceName = name; 
    }, 
    getData: function(name) { 
     return $injector.get(dataServiceName || 'dataService').data; 
    } 
    } 

}) 


.factory('dataService', function() { return {data: 'world'} }) 

.factory('dataService2', function() { return {data: 'world 2'} }); 
+0

Посмотрите на код, который я при условии, что я делаю неправильно, что не мешает ему за работой? Я получаю «инжектор инжектора не определен» –

+0

Возможно, я пропустил различия, но кажется, что ваш пример не должен отличаться от моего предоставленного кода, но мой не работает, что мне не хватает? –

+0

Вы не предоставили никакого кода на самом деле ... Создайте минимальный plunk с вашим кодом. –