29

次の angularjs サービスがあります。

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

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

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

4

4 に答える 4

45

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" を追加する必要があります。これは、サンプル コードが ng モジュールにある $http プロバイダーに依存するためです。

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

于 2013-06-26T19:22:40.340 に答える
18

私にとっては、次のように機能しました:

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")
于 2016-08-03T14:04:02.917 に答える
15

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

angular.element('*[ng-app]').injector().get("MyService").GetName ();
于 2013-06-27T12:40:26.667 に答える
0

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

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

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

于 2016-10-17T19:05:13.380 に答える