2013-07-30 7 views
5

私は2つの同じ部分からなるビューを持っていますが、内容のみが異なります。ですから、基本的には、左右のパーツの両方に1つのコントローラーと1つのビューを使用したいと思っています。私は(HTMLで)何
angular.js、javascript内の複数のコントローラインスタンス

<div class="board_body"> 
    <div class="left_board" ng-controller="leftBoardController"> 
     <div ng-controller="panelController" ng-include="template"></div> 
    </div> 
    <div class="right_board" ng-controller="rightBoardController"> 
     <div ng-controller="panelController" ng-include="template"></div> 
    </div> 
</div> 

私は左と右のコントローラ内のすべての初期化ロジックを維持し、panelControllerを使用して、それが左右の部品のためのビューです。この場合、panelControllerは、異なる値を持つ共通の$ scope変数を使用するため、共有することができます(varsは左右のコントローラに作成され、panelCotrlに表示されます)。 panelView.htmlで

angular.module("radar.leftController", []) 
.controller("leftController", function ($scope, ...) { 
    $scope.data = getSomeData(); 
} 

angular.module("radar.rightController", []) 
.controller("rightController", function ($scope, ...) { 
    $scope.data = getOtherData(); 
} 

angular.module("radar.panelController", []) 
.controller("panelController", function ($scope, ...) { 
    $scope.template = "somePath/panelView.html"; 
    // shared logic for left and right contrls goes here 
} 

<div>data: {{data.length}}</div> 

が右からIは、左右両方VARSを変更することができるが、左から私は左VARSを(予想通り)を変更することができると思われます。 (左右の部分が完全に分離している必要があります)。

コントローラを再利用する(複数のインスタンスを作成する)ための適切な方法は何ですか?

+0

本当に素早く見ると、あなたがやっていることはうまくいくはずです。右から、左と右の両方のヴァールを変更できると言ったらどういう意味ですか? plunkrに関するより完全な例を投稿できますか? – dtabuenc

答えて

0

これを行う正しい方法は、隔離された範囲でdirectivesを使用することです。 次に、あなたのコードはそうのようになります。

... 
angular.module("radar.panel", []) 
.directive("panel", function() { 
    return { 
    scope: {'panelData': '=' // Doubly bound to panel-data attribute}, 
    templateUrl: 'somePath/panelView.html' 
    controller: function ($scope, ...) { 
     // shared logic for left and right contrls goes here 
    } 
    } 
} 
<div class="board_body"> 
    <div class="left_board" ng-controller="leftBoardController"> 
     <div panel panel-data="data"></div> 
    </div> 
    <div class="right_board" ng-controller="rightBoardController"> 
     <div panel panel-data="data"></div> 
    </div> 
</div> 
0

あなたが角度のcontrollerAs構文を使用してコントローラの再利用の多くを達成することができます - トッドモットーでthisの記事を参照してください。

しかし、サービス/工場/プロバイダ内のコントローラ間で共有機能を維持し、コントローラをリーンに保つ方が良い方法だと思います。

+0

こんにちは、この質問は1年以上前に尋ねました))コントローラがあるので、コントローラ/テンプレートを再利用することもできます。そして、これは悪くないです。例えば、私の現在のプロジェクトでは、コントローラ/テンプレートを7つの場所で再利用しています(つまり、ルートが異なるということです)。この記事のコードに関しては、パネルごとに異なるコントローラを用意し、サービスを介してデータを共有する方がよいでしょう。今ではmabbyはコントローラを1つしか使用せず、ng-includeを避けます。私はこの質問を閉じる必要があります) –

関連する問題