私は次のようなサービスを提供しています:
angular.module('app').factory('ExampleService', function(){
this.f1 = function(world){
return 'Hello '+world;
}
return this;
})
JavaScriptコンソールからテストして、サービスの関数を呼び出したいと思いf1()
ます。
どうやってやるの?
私は次のようなサービスを提供しています:
angular.module('app').factory('ExampleService', function(){
this.f1 = function(world){
return 'Hello '+world;
}
return this;
})
JavaScriptコンソールからテストして、サービスの関数を呼び出したいと思いf1()
ます。
どうやってやるの?
angular.element(document.body).injector().get('serviceName')
AngularJSは、依存性注入(DI)を使用して、サービス/ファクトリをコンポーネント、ディレクティブ、およびその他のサービスに注入します。したがって、サービスを取得するために必要なことは、最初にAngularJSのインジェクターを取得することです(インジェクターは、すべての依存関係を接続し、それらをコンポーネントに提供する責任があります)。
アプリのインジェクターを取得するには、Angularが処理している要素からインジェクターを取得する必要があります。たとえば、アプリが呼び出したbody要素に登録されている場合injector = angular.element(document.body).injector()
取得したものから、injector
好きなサービスを利用できますinjector.get('ServiceName')
この回答の詳細:Angularからインジェクターを取得できません
さらにここに:レガシーコードからAngularJSを呼び出します
$scope
特定の要素を取得するためのもう1つの便利なトリック。開発者ツールのDOM検査ツールで要素を選択してから、次の行を実行します($0
常に選択された要素です)。
angular.element($0).scope()
まず第一に、あなたのサービスの修正版。
var app = angular.module('app',[]);
app.factory('ExampleService',function(){
return {
f1 : function(world){
return 'Hello' + world;
}
};
});
これはオブジェクトを返しますが、ここでは何も新しいものではありません。
これをコンソールから取得する方法は次のとおりです。
var $inj = angular.injector(['app']);
var serv = $inj.get('ExampleService');
serv.f1("World");
以前にそこで行っていたことの1つは、app.factoryが関数自体またはその新しいバージョンを返すと想定することでした。そうではありません。コンストラクターを取得するには、次のいずれかを実行する必要があります。
app.factory('ExampleService',function(){
return function(){
this.f1 = function(world){
return 'Hello' + world;
}
};
});
これにより、ExampleServiceコンストラクターが返されます。このコンストラクターは、次に「新規」を実行する必要があります。
または、代わりに
app.service('ExampleService',function(){
this.f1 = function(world){
return 'Hello' + world;
};
});
これにより、インジェクション時に新しいExampleService()が返されます。
@JustGoschaの答えは的確ですが、アクセスしたいときに入力することがたくさんあるので、これをapp.jsの下部に追加しました。次に、入力x = getSrv('$http')
する必要があるのはhttpサービスを取得することだけです。
// @if DEBUG
function getSrv(name, element) {
element = element || '*[ng-app]';
return angular.element(element).injector().get(name);
}
// @endif
グローバルスコープに追加されますが、デバッグモードでのみ追加されます。@if DEBUG
プロダクションコードで終わらないように、 中に入れました。このメソッドを使用して、prouductionビルドからデバッグコードを削除します。
Angularjs依存性注入フレームワークは、アプリモジュールの依存性をコントローラーに注入する役割を果たします。これは、インジェクターを介して可能です。
最初にng-appを識別し、関連するインジェクターを取得する必要があります。以下のクエリは、DOMでng-appを検索し、インジェクターを取得するために機能します。
angular.element('*[ng-app]').injector()
ただし、Chromeでは、以下に示すように、ターゲットng-appをポイントできます。$0
ハックと問題を使用しますangular.element($0).injector()
インジェクターを入手したら、以下のように依存関係が注入されたサービスを取得します
injector = angular.element($0).injector();
injector.get('$mdToast');