「現在」$scope
をAngularJSサービスに渡すのは正しいですか?
$ serviceが1つのコントローラーによってのみ消費されていることを知っている状況にあり、$serviceメソッド自体でコントローラーのスコープへの参照が必要です。
これは哲学的に正しいですか?
または、イベントを$ rootScopeにブロードキャストしてから、コントローラーにそれらをリッスンさせる方がよいでしょうか。
「現在」$scope
をAngularJSサービスに渡すのは正しいですか?
$ serviceが1つのコントローラーによってのみ消費されていることを知っている状況にあり、$serviceメソッド自体でコントローラーのスコープへの参照が必要です。
これは哲学的に正しいですか?
または、イベントを$ rootScopeにブロードキャストしてから、コントローラーにそれらをリッスンさせる方がよいでしょうか。
何か非同期が発生したときにコントローラーに知らせるには、Angular promisesを使用します。
. $apply
_ $rootScope.$apply
_
変数の読み取りに関しては、パラメータを受け取った方がよいでしょう。ただし、スコープからオブジェクトパラメーターとして読み取ることもできますが、パラメーターを使用すると、サービスインターフェイスがより明確になります。
あなたの機能が1つのコントローラーにのみ固有である場合、サービスは必要ありません。
コントローラーのタスクは特定のモデルを操作することですが、サービスはグローバル タスクを処理する必要があります。私は物事を混同するのではなく、このパラダイムに固執したいと思います.
これはドキュメントが言うことです
サービス
Angular サービスは、Web アプリに共通の特定のタスクを実行するシングルトンです
コントローラ
Angular では、コントローラーは JavaScript 関数 (タイプ/クラス) であり、ルート スコープを除いて、angular Scope のインスタンスを拡張するために使用されます。
PS: それとは別に、消化する必要がある場合は、サービス内に $rootScope を挿入することもできます。
はい。サービスを初期化するときに $scope をサービスに渡すことができます。サービス コンストラクターでは、スコープを this._scope のようなものに割り当てて、サービス内でスコープを参照できます。
angular.module('blah').controller('BlahCtrl', function($scope, BlahService) {
$scope.someVar = 4;
$scope.blahService = new blahService($scope);
});
angular.module('blah').factory('blahService', function() {
//constructor
function blahService(scope) {
this._scope = scope;
this._someFunction()
}
//wherever you'd reference the scope
blahService.prototype._someFunction = function() {
this._scope['someVar'] = 5;
}
return blahService;
});