Подтвердить что ты не робот

Позвоните в службу angularjs из простого кода js

У меня есть следующее угловое обслуживание:

angular.module('app.main').factory('MyService', ["$http", function ($http) {
    return new function () {

        this.GetName = function () {
            return "MyName";
        };
    };
}]);

Как я могу вызвать функцию GetName из MyService из устаревшего кода js?

4b9b3361

Ответ 1

Используйте angular.injector. Используя свой код, вы можете сделать что-то вроде следующего:

angular.module('main.app', []).factory('MyService', ['$http', function ($http) {
    return new function () {

        this.GetName = function () {
            return "MyName";
        };
    };
}]);


angular.injector(['ng', 'main.app']).get("MyService").GetName();

Вот jsfiddle: http://jsfiddle.net/wGeNG/

ПРИМЕЧАНИЕ. Перед загрузкой пользовательского модуля вам необходимо добавить "ng" в качестве вашего первого модуля, так как ваш примерный код зависит от поставщика $http, который находится в модуле ng.

EDIT. Используя get(), как в ответе OP , но, обратите внимание, что этот код извлекает услугу, не полагаясь на элемент, связанный с модулем приложения "main.app".

Ответ 2

Использование следующей строки помогает выполнить мой метод из службы angularjs:

angular.element('*[ng-app]').injector().get("MyService").GetName ();

Ответ 3

Для меня это сработало с:

angular.element(document.body).injector().get("MyService")

У меня была ошибка "Неизвестный поставщик" при попытке:

angular.injector(['ng', 'main.app']).get("MyService")

и поскольку я использую jqLite, я не могу сделать

angular.element('*[ng-app]')

потому что селекторы не поддерживаются jqLite, но я получил идею [Дор Коэн]. Моя директива ng-app находится на моем теге тела, затем я могу использовать:

angular.element(document.body).injector().get("MyService")

или

angular.element(document).find('body').injector().get("MyService")

Ответ 4

Вот полезный метод, который я использую:

function getService(name, element) {
    element = element || '*[ng-app]';
    return angular.element(element).injector().get(name);
}

getSrv("name-of_service", document. тела)