web-dev-qa-db-ja.com

準備ができているangularjsの$ rootScopeに関数を登録する方法

私はangularjsのどこでも利用できるメソッドを登録する必要があります。このメソッドには2つの引数(リソースID、削除成功時のコールバック)があり、リソースプロバイダーを使用して実際にアイテムを削除します。

次に、それを登録するには、angularjsが_$rootScope_とMyResourceProviderを挿入する必要があります。私の最初のアイデアは、ホームページコントローラーでそれを行うことでした。

 var HomeCtrl = function($ rootScope、MyResourceProvider){
 $ rootScope.confirmAndDeletePackage = function(sId、fCallback){
 //何かを行う
 MyResourceProvider。 delete({id:sId}、fCallback); 
} 
} 

ここから実際に私の問題が始まります。これは通常のナビゲーション([ホーム]-> [リスト]-> [選択]-> [削除])では正常に機能しますが、ユーザーがホームページを経由せずに削除ボタンを使用できるページに直接アクセスした場合、この方法は使用できません( HomeControllerが初期化されていません)...

したがって、私の質問は、このコードをどこに移動して、アプリケーションのブートストラップで常に実行されるようにすることができるかということです。

myApp.config()を試しましたが、成功しませんでした...

何か案が?

16
poussma

@ganarajがコメントで述べたように、これにはおそらくサービスの方が適しています。

ただし、質問に答えるには、 run() メソッドを使用できます。

myApp.run(function($rootScope, MyResourceProvider) {
    $rootScope.confirmAndDeletePackage = function (sId, fCallback) {
        // do some stuff
        MyResourceProvider.delete({id: sId}, fCallback);
    }
})

run()は、すべてのモジュールがロードされた後に呼び出されます。

41
Mark Rajcok