2016-04-26 5 views
0

私は複数の関数を持つファクトリを作成しています。構造は次のようなものです:

app.factory('Service', function() { 

    var Service = {}; 
     Service.method1 = function($scope) { 
     //logic 
     return something1 
     }; 
     Service.method2 = function($scope) { 
     return something2 
     }; 
     Service.method3 = function($scope) { 
     return something3 
     }; 
     Service.method4 = function($scope, Service) { 
     var object1 = Service.method1($scope) 
     var object2 = Service.method2($scope) 
     var object3 = Service.method3($scope) 

     //do something with object 1,2,3 and return the result 
     return result 
     }; 

これは、ファクトリをファクトリでファクトリで使用する正しい方法ですか?そして、私はちょうどそのような$スコープを渡すことができるかどうかは分かりません。

+0

これは機能しますか?あなたは何かエラーや何かを得ていますか?この質問を見てみましょう:http://stackoverflow.com/q/22159189/1887101 – Adjit

+3

一般的にあなたのサービスではスコープを使用したくありません。 $ scopeはビューにデータをバインドします。これはコントローラのジョブです。このサービスは、$ http要求の結果と同様に、コントローラが使用するデータを処理するだけです。 – Rob

+0

このコードは、controller1というデータが存在する場所でのみ動作します。しかし、私がcontroller2でこのサービスを使用すると、動作しません。サービス内のデータを永続化する方法はありますか? $ scopeを渡すのは良い方法ではありませんが、すべてのデータがそこに保存されているので、何が最善の方法であるか分かりません。 – Kahsn

答えて

0

あなたは、あなたが質問のために、この

angular.module('B',['A']).controller('BCtrl',function($scope,'Service'){ 
    Service.method2(); 
}); 

回答のようなあなたの工場のサービスを呼び出すことができますself

var moduleA= angular.module('A',[]); 
moduleA.factory('Service', function() { 
    var self = this; 
    self.method1: function() { 
      alert('a'); 
     }, 
    self.method2: function() { 
      self.method1(); 
     } 
    }; 
}); 

から内部サービス機能を呼び出すことができます質問1

ため回答2

サービスは$scopeを変更しないでください。工場、サービス、またはプロバイダ内で通常$scopeを使用しないでください。ただし、$rootScopeの依存関係をファクトリの関数コンストラクタに挿入して使用することができます。

module.factory('Service', function($rootScope){ 
    $rootScope.value = "value"; 
}); 
+0

あなたは自己とこれに関する詳細を提供できますか?私は自分のサービス名として自分の名前を付けますか?それとも文字通り自分自身とこれですか? – Kahsn

0

工場はリターンサービスオブジェクトに必要です。永続データはファクトリ関数でvarと宣言されています。

app.factory('Service', function() { 

    //Declare persistant data here 
    var persistantData; 

    var Service = {}; 

    Service.method1 = function(arg) { 
     //logic 
     return something1; 
    }; 
    Service.method2 = function(arg) { 
     return something2; 
    }; 

    //return service object 
    return Service; 
}; 

USAGE:

app.controller('ctrl1', function($scope, Service) { 
    $scope.out1 = Service.method1($scope.in1); 
}); 

永続データに保存されているものはすべて、アプリの全体の寿命を持続します。

関連する問題