2017-05-10 14 views
2

2つのページには、いくつかの機能を含む1つの共通タブがあります。私はすでに1ページのためにそのタブのための準備ができてコードを複製せずに私の2番目のページにすべてのコードを再利用したい。共通のJSファイルを使用して2つのコントローラ間で変数とメソッドを共有する

例えば、これはタブのページ1のための私のコードです:

$ scope.myObjが重く、私は、共通の1を持っていると思いますので、タブの両方で共通になりますすべてのメソッドで使用されている
app.controller('myCtrl', ['$scope', '$window', 'myService', '$filter', function ($scope, $window, myService,$filter) { 
$scope.myObj = [ 
          {id:1,location : null}, 
          {id:2,location : null} 
       ] 

//Lots of other variables here which are common and will be used in both the tabs and lots of methods which are also common 
}]); 

jsファイルでは、コードの重複を避けるために、2ページのコントローラの両方でこれらのメソッドをすべてコピー&ペーストする必要がないように、この共通の変数とメソッドをすべて保持します。

私は以下のような1例を見つけましたが、私は私の$ scope.myObjのような方法で複雑な変数を共有する方法を得ていないのです。

How to share common logic between controllers?

+0

コードを再利用するために、サービスと工場を使用できます。このリンクを参考にしてください:https://blog.thoughtram.io/angular/2015/07/07/service-vs-factory-once-and-for-all.html – Burhan

+0

可能な複製のhttp:// stackoverflow .com/questions/21919962/share-data-between-angularjs-controllers – Sagar

+0

可能な複製のhttp://stackoverflow.com/questions/43693072/how-to-passing-data-from-one-controller-to-another-コントローラを使用する角度js-1 –

答えて

1

は、多分私達はmyServiceを使用することができ、角度Serviceサービスを作成します。 サービスでは、新しい値を割り当てることによってsharedObjectの参照をリセットしていないことを確認してください。値を変更する必要があります。

例:myService

app.service('myService', ['configService', '$http', '$log', '$q', 
     function (configService, $http, $log, $q) { 

    var self = this; 
    var self.sharedObjects ={}; 
} 

はmyService.sharedObjectsのプロパティとして共有されているすべてのオブジェクトを追加するに

myService.shareObjectsに新しい値を割り当てていないが、uはのようmyService.shareObjectsにプロパティを設定することができます

myService.shareObjects.prop1,myService.shareObjects.prop2 
2

角度ファクトリを使用してコントローラ間で使用するだけで、共通の変数値を取得できます。

まずコントローラ:これは多くの可能な方法

あなたは自分のコントローラに工場の上に注入し、それらを使用する一般的な変数値

angular.module("commonmodule", []) 
    .factory('sharedFactory', function() { 
     var sharedVariable = 1; 
     return { 
      getSharedValue : function() { 
       return sharedVariable; 
      }, 
      setSharedValue : function (newValue) { 
       sharedVariable = newValue; 
      } 
     } 
}}); 

を配置します工場を作成のいずれかです。

第2コントローラ

angular.module('maincontrollertwo', ["commonmodule"]) 
    .controller('controllertwo', ["$scope", "sharedFactory", function ($scope, sharedFactory) { 
     $scope.value1 = sharedFactory.getSharedValue(); 
     // value of $scope.value1 = 'someValueFromCtr1'; 
    } 
+0

私を助けるためのあなたの親切な努力のためにUpvotedしかし、あなたが私の$ scope.myObjをどのように使用するかあなたの工場に私を見せてもらえますか? –

+0

@Learningは要件に依存します。なぜあなたは工場で$ scope.myObjを使いたいのですか?あなたは値を処理して結果を得るか、そのデータを別のコントローラに渡したいのですか?どちらの場合も、工場でその結果を得ることができます。 –

関連する問題