[解決済み] AngularJSの非シングルトン・サービス
2023-03-29 15:19:52
質問
AngularJSのドキュメントには、ServiceはSingletonsであると明記されています。
AngularJS services are singletons
逆算して
module.factory
もシングルトンインスタンスを返します。
シングルトンでないサービスのユースケースがたくさんあることを考えると、サービスのインスタンスを返すファクトリーメソッドを実装する最良の方法は何でしょうか?
ExampleService
の異なるインスタンスによって満たされます。
ExampleService
?
どのように解決するのですか?
ファクトリーが返すべきは
new
これは依存性注入を破壊し始め、ライブラリは、特にサードパーティにとって厄介な振る舞いをするでしょうから。要するに、非シングルトン サービスに正当な使用事例があるかどうか、私にはわかりません。
同じことを達成するためのより良い方法は、ゲッターとセッターのメソッドが付けられたオブジェクトのコレクションを返す API としてファクトリーを使用することです。この種のサービスがどのように機能するかを示すいくつかの擬似コードを示します。
.controller( 'MainCtrl', function ( $scope, widgetService ) {
$scope.onSearchFormSubmission = function () {
widgetService.findById( $scope.searchById ).then(function ( widget ) {
// this is a returned object, complete with all the getter/setters
$scope.widget = widget;
});
};
$scope.onWidgetSave = function () {
// this method persists the widget object
$scope.widget.$save();
};
});
これは、ID によってウィジェットを検索し、レコードに加えられた変更を保存できるようにするための擬似コードです。
これは、サービスのための疑似コードです。
.factory( 'widgetService', function ( $http ) {
function Widget( json ) {
angular.extend( this, json );
}
Widget.prototype = {
$save: function () {
// TODO: strip irrelevant fields
var scrubbedObject = //...
return $http.put( '/widgets/'+this.id, scrubbedObject );
}
};
function getWidgetById ( id ) {
return $http( '/widgets/'+id ).then(function ( json ) {
return new Widget( json );
});
}
// the public widget API
return {
// ...
findById: getWidgetById
// ...
};
});
この例には含まれていませんが、この種の柔軟なサービスは、簡単に状態を管理することもできます。
今は時間がありませんが、もし役に立つのであれば、後で簡単なPlunkerを組み立てて実演することができます。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン