特定のサービスが注入される各機能に同じコード行を実行したい。例えば:角度サービスを注入するときに同じコードを実行する
app.service('sameInitService', function ($rootScope) {
this.init = function (scope) {
scope.foo = $rootScope.foo;
}
});
app.controller('oneController', function ($scope, sameInitService) {
sameInitService.init($scope); // <- This line of code
});
app.controller('twoController', function ($scope, sameInitService) {
sameInitService.init($scope); // <- Is the same
});
このサービスが注入されたときに同じ行のコードを書く必要がないのですか?
サービスはシングルトンなので、これを行うためのユースケースは限られています。ここで達成しようとしていることと、すべてのコントローラが同じコードブロックを呼び出さなければならない理由についてもう少し説明できますか? – Claies
$ rootScopeに、アプリケーションの翻訳文字列を含むオブジェクトを添付しました。私は全く同じ構文を使ってテンプレート上のそのオブジェクトにアクセスできるようにしたい。例: {{translationObject.Path.To.My.String}} $ rootScopeに直接アクセスできないため、**コンポーネント**では動作しません。私は私が使用できることを知っています: {{$ root.translationObject.Path.To.My.String}} しかし、私は特定の理由でしたくありません。プロダクションビルドプロセスでは、正規表現を使用して角表現を翻訳に置き換えますので、できるだけシンプルにする必要があります。 –
これはあなたのサービスを設計するには貧弱な方法であり、失敗する傾向があります。サービスはシングルトンであり、サービスの価値を変更する瞬間に、これを注入したすべてのコントローラーに対して変更しています。主にすべてのコントローラが同じ '$ rootScope'を共有しているので、これは正しく動作しているように見えるかもしれませんが、間違いなく危険につながるパスです。 – Claies