2016-07-18 17 views
1

私は相当数のサブモジュールを持つAngularJS Webアプリケーションで作業していました。 2つのサブモジュールはCRUD機能を持っていたため、これらのモジュールの両方に同じ名前のコントローラが2つありました。 http://plnkr.co/edit/JRwJsrJd84nPnjj36GAZAngularJS異なるモジュールから同じ名前のコントローラを混在させる

<!DOCTYPE html> 
<html> 

<head> 
    <script data-require="[email protected]" data-semver="1.5.6" src="https://code.angularjs.org/1.5.6/angular.min.js"></script> 
    <link rel="stylesheet" href="style.css" /> 
    <script> 
    angular 
     .module('app', [ 
     'app.one', 
     'app.two' 
     ]); 

    angular 
     .module('app.one', []) 
     .controller('MyCtrl', function() { 
     var vm = this; 
     vm.message = 'Hello World from app.one!'; 
     }); 

    angular 
     .module('app.two', []) 
     .controller('MyCtrl', function() { 
     var vm = this; 
     vm.message = 'Hello World from app.two!'; 
     }); 
    </script> 
</head> 

<body ng-app="app" ng-controller="MyCtrl as vm"> 
    <h1>{{ vm.message }}</h1> 
</body> 

</html> 

ます。また、これはplnkrで見つけることができます。コードは次のように見えた方法のアイデアについては、以下のスニペットを見ています。

今、問題は私が混乱していることです。 AngularJSが同じ名前のコントローラを別のモジュールと混同するのは当然のことです。誰かがこれを説明し、これを克服する方法を示せば、本当に感謝しています。

ありがとうございます!

+0

モジュールのためにすべての 'が必要です'が1つずつ読み込まれ、 '$ injector'または親モジュールの各' $ provide'値を統合している場合。 Angular.js: 'function module(name、requires、configFn){...}'、 'function loadModules(modulesToLoad){...}'です。 '$ injector'は要素にバインドされているので、' app'を持っていれば、 'app'要素に束縛されています。' $注入 '' app.two'のときは 'MyCtrl'を上書きします。 '$ inject'と' $ provide'は名前をキーとして働きます。そのため、あなたはそれを上書きしました。 – Appeiron

答えて

1

コントローラには一意の名前を付ける必要があります。あなたはこれらのモジュールの両方でMyCtrlと呼ばれるコントローラを持っている場合は、あなたが

angular 
    .module('app', [ 
     'app.one', 
     'app.two' 
     ]); 

以下のように角度がapp.oneapp.twoの両方をロードするか、あなたのapp.jsでは、それだけで最新のものをピックアップしようとしています。この場合、コントローラーはapp.twoです。

条件に基づいてどのモジュールを選択的にロードするかによって、これを克服することができます。

+0

私が理解したこの部分は、モジュール内からコントローラをロードしようとすると(つまり、ui.routerを使ってみましょう)、最後にロードされたモジュール。この種のカプセル化の目的を殺すのではないでしょうか?あるいは、私はこの間違ったことを見ていますか? – haseebahmed7

+0

@ haseebahmed7 - この質問をご覧ください:http://stackoverflow.com/questions/30804362/same-controller-as-name-in-angular-js-directive-breaks-function-in-parent-cont-隔離されたスコープの設定ディレクティブに私の問題を解決しました。 – kyrisu

関連する問題