AngularJS - 从angular.injector获取服务时的未知提供者$ modal

时间:2016-06-23 09:27:27

标签: angularjs dependency-injection

我有一段需要调用角度服务的javascript代码。我尝试通过检索定义服务的角度模块来访问服务,然后自己获取服务:

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

模块和服务的定义如下:

    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;

不幸的是我收到错误:

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

我想我需要注入$ modal,但我不知道怎么做。

2 个答案:

答案 0 :(得分:0)

ui-bootstrap库现在使用`$ uibModal'服务。

因此您需要注入$uibModal服务。

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

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

return service;

答案 1 :(得分:0)

我认为您需要将ui.bootstrap模块作为模块的依赖项包含在内: 在你的依赖项中包含ui.bootstrap:

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

此外,您需要在html中的某处包含ui-bootstrap-xxx.min.js。 如果您在版本&gt; = 0.14中使用ui-bootstrap,则需要将$ modal更改为$ uibModal