2016-06-23 9 views
0

Ich habe ein Stück JavaScript-Code, der einen eckigen Service aufrufen muss. Ich versuche, auf den Dienst zuzugreifen, indem die Winkelmodul Abrufen wo der Dienst definiert ist und dann den Dienst es selbst bekommen:

var messagemanagerModule = angular.injector(['ng', 'portal.services.messagemanager']); 
    var messageService = messagemanagerModule.get('MessageService'); 
    messageService.postMessage('portal', moduleId, 'selectModule'); 

Das Modul und der Service ist wie folgt definiert:

angular.module('portal.services.messagemanager', ['modules.modal', 'modules.softlogoff']) 
    .factory('MessageService', messageService); 

messageService.$inject = ['$rootScope', '$modal', '$translate', 'ConfigurationService']; 

function messageService($rootScope, $modal, $translate, ConfigurationService) { 
    var service = { 
     showMessage: showMessage, 
     showSoftLogoff: showSoftLogoff, 
     postMessage: postMessage, 
     supportedMessages: supportedMessages 
    }; 

    return service; 

Leider bekomme ich der Fehler:

Error: $injector:unpr Unknown provider: $modalProvider <- $modal <- MessageService" 

ich glaube, ich brauche $ modal zu injizieren, aber ich weiß nicht, wie es zu tun.

Antwort

0

Die UI-Bootstrap-Bibliothek verwendet jetzt den Dienst '$ uibModal'.

So müssen Sie $uibModal Service injizieren.

messageService.$inject = ['$rootScope', '$uibModal', '$translate', 'ConfigurationService']; 

function messageService($rootScope, $uibModal , $translate, ConfigurationService) { 
var service = { 
    showMessage: showMessage, 
    showSoftLogoff: showSoftLogoff, 
    postMessage: postMessage, 
    supportedMessages: supportedMessages 
}; 

return service; 
+0

Ich glaube nicht, dass das das Problem ist. Ich habe kein Problem den MessageService von einem anderen Controller anzurufen. Wenn ich $ uibModal die Anwendung Fehler beim Start verwenden: Unbekannter Provider: $ uibModalProvider <- $ uibModal <- MessageService <- ContextManagerService – peterbf

0

Ich glaube, Sie brauchen das ui.bootstrap Modul als Abhängigkeit des Moduls umfassen: umfassen ui.bootstrap in Sie Abhängigkeiten:

angular.module('portal.services.messagemanager', ['modules.modal','modules.softlogoff','ui.bootstrap']) 

Weitere müssen Sie die ui-Bootstrap enthalten -xxx.min.js irgendwo in Ihrem HTML. Wenn Sie UI-Bootstrap in der Version> = 0.14 verwenden, müssen Sie $ modal in $ uibModal ändern

+1

Vielleicht das andere Modul, das Ihren MessageService verwendet, hat bereits ui.bootstrap als Abhängigkeit, aber in Ihrem aktuellen Modul, das den MessageService ui.bootstrap verwendet, ist möglicherweise nicht enthalten. – Thorsten

+0

Ich benutze Version 0.12, also denke ich $ modal ist richtig. Das Modul 'portal.services.messagemanager' funktioniert einwandfrei - ich kann es von einem anderen Controller ohne Probleme aufrufen. Nur wenn ich von "eckig" anrufe, fehlt mir etwas. – peterbf

+0

Ich bin ein bisschen weiter gekommen, indem ich 'ui.bootstrap' zu dieser Zeile hinzugefügt habe: var messagemanagerModule = angular.injector (['ng', 'ui.bootstrap', 'portal.services.messagemanager']); Im Code "außerhalb" eckig, wo ich den Service nutzen möchte. Jetzt bekomme ich einen anderen unbekannten Providerfehler, aber ich muss eigentlich nur das richtige Modul zum injizieren finden. – peterbf

Verwandte Themen