私は次のangularjsサービスを持っています:
angular.module('app.main').factory('MyService', ["$http", function ($http) {
return new function () {
this.GetName = function () {
return "MyName";
};
};
}]);
従来のjsコードからGetName
からMyService
関数を呼び出すにはどうすればよいですか?
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」にバインドされている要素に依存せずにサービスを取得していることに注意してください。
私にとっては:
angular.element(document.body).injector().get("MyService")
これを試してみると、「不明なプロバイダー」エラーが発生しました:
angular.injector(['ng', 'main.app']).get("MyService")
そして、私はjqLiteを使用しているので、私はできません
angular.element('*[ng-app]')
セレクターはjqLiteでサポートされていませんが、[Dor Cohen]のアイデアを得たからです。私のディレクティブng-appは私のbodyタグにあり、次に使用できます:
angular.element(document.body).injector().get("MyService")
または
angular.element(document).find('body').injector().get("MyService")
次の行を使用すると、angularjsサービスからメソッドを実行できます。
angular.element('*[ng-app]').injector().get("MyService").GetName ();
私が使用するユーティリティメソッドは次のとおりです。
function getService(name, element) {
element = element || '*[ng-app]';
return angular.element(element).injector().get(name);
}
getSrv("name-of_service", document.
体)