2016-08-24 10 views
1

私は小さなngRouteの例を持っていますが、これは複数のアプリケーションとコントローラを使用しようとしています。最初のapp/controllerはメインページ用で、app/controllerの2番目のセットはngRouteがボタンを押した後に読み込むhtml用です。しかし、それは動作していないようです。以下のコード:複数のコントローラがngRoute内で動作しています

メインモジュール

var app = angular.module("MainModule", ["ngRoute"]);

メインコントローラ

app.controller("MainController", function ($scope) { 

}); 

app.config(function ($routeProvider) { 
    $routeProvider 
     .when('/customers', { 
      templateUrl: "customers.html", 
      controller: "CustomerController" 
    }) 
}); 

カスタマー・モジュール

var CustomerModule = angular.module("CustomerModule", []); 

カスタマー・コントローラ

CustomerModule.controller("CustomerController", function ($scope) { 

$scope.Test = "Hey"; 

$scope.CustomerArray = [ 
    { "firstName" : "John", "lastName" : "Williams", "Occupation" : "Fireman"  }, 
    { "firstName" : "Louis", "lastName" : "Abrams", "Occupation" : "Policeman" } 
    ] 
}); 

index.htmlを

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
    <meta charset="utf-8" /> 

    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script> 
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-route.js"></script> 
    <script src="scripts/MainModule.js"></script> 
    <script src="scripts/MainController.js"></script> 
    <link rel="stylesheet" type="text/css" href="MyCSS.css"> 
</head> 
<body> 


    <div ng-app="MainModule"> 
     <div id="TopDiv">Main Module</div> 
     <a href="#/customers"><input type="button" value="Load Customers" /> </a> 

     <div ng-view></div> 

    </div> 

</body> 
</html> 

customers.html

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
    <meta charset="utf-8" /> 

    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script> 

    <script src="scripts/CustomerModule.js"></script> 
    <script src="scripts/CustomerController.js"></script> 
</head> 
<body> 
    <div ng-app="CustomerModule" ng-controller="CustomerController"> 
     {{Test}} 

      <ul> 
       <li ng-repeat="x in CustomerArray">{{x.firstName x.lastName x.Occupation}}</li> 
      </ul> 

    </div> 
</body> 
</html> 

がコードのビット長が、うまくいけば、簡単なコード。 "Load Customer"ボタンを押したときの出力は、文字通り、{{Test}}の後に続く配列データなしです。

私はちょうど角を学んでいますので、この問題の助けをいただければ幸いです。私は、楽しく、学ぶためにこれをやっています。だから、私は問題が押されていないと思う。 :)ありがとう!

+0

問題ここでは、 'ng-に* NG-ルートは* parialをロードするために期待されていることですあなたのcustomers.htmlファイルは部分的なものではなく、独自の 'ng-app'ファイルを含んでいます。また、 '$ routeProvider'の' controller'パラメータは '$ routeProvider'が設定されているモジュールと同じモジュールからコントローラオブジェクトをインスタンス化しますが、' CustomerController'はまったく別のモジュールです。その上に、JavaScriptの 'controller'とHTMLの' ng-controller'を同時に使うべきではありません。コントローラの一意のインスタンスを読み込むためです。 – Claies

+0

ここには多くの間違い、言い換えれば間違いがあります。私は実際のサンプルをまとめることができますが、少し時間がかかります。 – Claies

+0

お時間をありがとうございました。私はこの事例を投稿するだけで、多くの間違いを覚えています。あなたが実用的なサンプルを提供することができれば、それは素晴らしいことでしょう!もしそうでなければ、それは大丈夫です、私はそれが多くの努力であることを理解しています。これは私のために学習し実験するためのものです。ありがとうございました。 –

答えて

1

質問のコードをベースとして作業例を書きました。かなりの調整が加えられているので、私は少しの説明で各部分をリストアップします。

各「ページ」に独自のモジュールを持つ必要はありません。しかし、それは悪い習慣ではありません。

MainModule(MainModule.js)で依存関係としてCustomerModuleを含める:

var app = angular.module("MainModule", ["ngRoute", "CustomerModule"]); 

ロードALLあなたがここに各ビューに1つのモジュールの持つ設計をサポートするために、私は次の変更を行いましたindex.htmlをでスクリプト:これらの変更により

<script src="scripts/MainModule.js"></script> 
<script src="scripts/MainController.js"></script> 

<script src="scripts/CustomerModule.js"></script> 
<script src="scripts/CustomerController.js"></script> 

$routeProviderCustomerControllerを見つけて、ルート変更の際に、それをインスタンス化することができます。 customers.htmlはコントローラを作成する必要がなくなり、完全な部分的なものにすることができます。また、customers.htmlで使用される式は変更する必要があり、各プロパティの個別の式に分解されました。

最終customers.html:

{{Test}} 

<ul> 
    <li ng-repeat="x in CustomerArray">{{x.firstName}} {{x.lastName}} {{x.Occupation}}</li> 
</ul> 

plnkr.co上の完全な作業サンプル:http://plnkr.co/edit/EjwW9Fsc2DPhBejUETwB?p=preview

+0

これは完全に機能します。どうもありがとうございました!明確かつ簡潔で、すべてが別々のファイルに分割されます。これは、長期実行コーディングのための最良のアイデアのようです。そしてそのサンプルサイトは素晴らしいです!ブラボー! –

0

わかりませんが、問題はMainModuleにあります。それはとてもこれかのようにする必要があります:

var app = angular.module("MainModule", ["ngRoute"]); 

あなたが唯一のパラメータでangular.moduleを呼び出す - それは唯一のgetモジュールをしようとして、作成しません。

そしてcustomers.html唯一のフル、htmlのあなたの部分を含んでいないはずです。

customers.html

{{Test}} 

<ul> 
    <li ng-repeat="x in CustomerArray">{{ x.firstName }} {{ x.lastName }} {{ x.Occupation }}</li> 
</ul> 

そしてのindex.htmlに移動顧客のjsファイルを追加します。

<script src="scripts/MainModule.js"></script> 
<script src="scripts/MainController.js"></script> 
<script src="scripts/CustomerModule.js"></script> 
<script src="scripts/CustomerController.js"></script> 
<link rel="stylesheet" type="text/css" href="MyCSS.css"> 

希望します。

+0

お時間をありがとうございました。あなたはMainModuleラインについてのスポットですが、私の間違いです!悲しいことですが、提案された変更を加えれば、結果は変わりません。これは難しいはずのようではありません!再度、感謝します。 –

関連する問題