106

「現在」$scopeをAngularJSサービスに渡すのは正しいですか?

$ serviceが1つのコントローラーによってのみ消費されていることを知っている状況にあり、$serviceメソッド自体でコントローラーのスコープへの参照が必要です。

これは哲学的に正しいですか?

または、イベントを$ rootScopeにブロードキャストしてから、コントローラーにそれらをリッスンさせる方がよいでしょうか。

4

4 に答える 4

67

何か非同期が発生したときにコントローラーに知らせるには、Angular promisesを使用します。

. $apply_ $rootScope.$apply_

変数の読み取りに関しては、パラメータを受け取った方がよいでしょう。ただし、スコープからオブジェクトパラメーターとして読み取ることもできますが、パラメーターを使用すると、サービスインターフェイスがより明確になります。

于 2013-03-19T20:56:59.450 に答える
15

あなたの機能が1つのコントローラーにのみ固有である場合、サービスは必要ありません。

コントローラーのタスクは特定のモデルを操作することですが、サービスはグローバル タスクを処理する必要があります。私は物事を混同するのではなく、このパラダイムに固執したいと思います.

これはドキュメントが言うことです

サービス

Angular サービスは、Web アプリに共通の特定のタスクを実行するシングルトンです

コントローラ

Angular では、コントローラーは JavaScript 関数 (タイプ/クラス) であり、ルート スコープを除いて、angular Scope のインスタンスを拡張するために使用されます。

PS: それとは別に、消化する必要がある場合は、サービス内に $rootScope を挿入することもできます。

于 2013-03-19T20:52:56.733 に答える
9

はい。サービスを初期化するときに $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;

});
于 2014-08-22T16:34:56.080 に答える