web-dev-qa-db-ja.com

シンプルなjsコードからangularjsサービスを呼び出す

私は次のangularjsサービスを持っています:

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

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

従来のjsコードからGetNameからMyService関数を呼び出すにはどうすればよいですか?

29
Dor Cohen

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/

[〜#〜] note [〜#〜]-サンプルコードなので、カスタムモジュールをロードする前に最初のモジュールとして「ng」を追加する必要がありますngモジュールにある$ httpプロバイダーに依存します。

[〜#〜] edit [〜#〜]-OPの答えのようにget()を使用するbutこのコードは、アプリモジュール「main.app」にバインドされている要素に依存せずにサービスを取得していることに注意してください。

43
mitch

私にとっては:

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

これを試してみると、「不明なプロバイダー」エラーが発生しました:

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

そして、私はjqLit​​eを使用しているので、私はできません

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

セレクターはjqLit​​eでサポートされていませんが、[Dor Cohen]のアイデアを得たからです。私のディレクティブng-appは私のbodyタグにあり、次に使用できます:

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

または

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

次の行を使用すると、angularjsサービスからメソッドを実行できます。

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

私が使用するユーティリティメソッドは次のとおりです。

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

getSrv("name-of_service", document.体)

0
Fabii