2017-04-25 10 views
0

以下のコードは1つのコントローラにあります。Angularjsを使用して異なるコントローラにデータを渡す

$scope.DataModel= []; 
    $scope.DataModelTexts= { buttonDefaultText: '' }; 

もう1つのコントローラで同じコードを使用します。今では2番目のコントローラにも同じコードを書くのではなく、これを工場やサービスの共通コードに入れて、両方のコントローラで同じコードを使う方法があるかどうかを知りたいです。私は工場やサービスについて読んでみることにしました。私はシナリオでこれらのいずれかを使用する方法を少し混乱させています。

いずれの情報も、anglejsの工場とサービスに関する知識を得るのに役立ちます。ありがとう。

+0

これを確認してくださいこのドキュメントはhttp://stackoverflow.com/documentation/angularjs/1923/sharing-data/26454/sharing-data-from-one-controller-to-another-using-service#t=201704260743521596768 –

答えて

1

あなたは適切な道を歩いているので、コントローラ間でコードを共有するために工場やサービスを使用することができます。角度サービス(およびファクトリ)ではシングルトンがあることに注意してください。アプリケーションの起動時に一度インスタンス化され、コントローラにそれを挿入すると、同じインスタンスを参照しています。次のコードを考えてみましょう:

var myApp = angular.module('myApp',[]); 

myApp.service('MyService', function() { 
    let _someValue = 'Initial Value'; 
    this.setValue = function(value){ 
    _someValue = value; 
    } 
    this.getValue = function(){ 
    return _someValue; 
    } 
}); 

//First Controller Run 
myApp.controller('ControllerA', function($scope, MyService) { 
    MyService.getValue(); //Initial Value 
    MyService.setValue("BRAND NEW VALUE!!!"); 
}); 

//Run after ControllerA 
myApp.controller('ControllerB', function($scope, MyService) { 
    MyService.getValue(); //BRAND NEW VALUE!!! 
}); 

彼女は、MyServiceがsomeValueの状態を保持していることがわかります。 ControllerAはそれにMyServiceを注入し、そのサービスのメソッドを使用して新しい値を設定することができます。これで、ControllerBのような同じ状態の後続の呼び出しに対して、更新された値が返されます。

0

あなたは.config()か(ここではこれらのSO良い:AngularJS app.run() documentation?run()ブロックを使用することができ、その後限り、あなたは注入としてあなたのコントローラやサービス(内から$rootScope.DataModel$rootScope.DataModelTextsからそれらを呼び出す、$ rootScopeにこれらの再利用の変数をバインドしますこれらのコントローラとサービスへの$ rootScope)。

関連する問題