2017-03-06 6 views
1

個々のページの本体をレンダリングする内部に@RenderBody()を持つマスターレイアウトを持つMVCアプリケーションがあります。マスターレイアウトではbodyタグにanglejsのアプリケーション名とコントローラ名を付けました。AngularJS MVC Razor - 1つのコントローラを複数のファイルでどのように定義しますか?

コントローラを別のグローバルangular.jsファイルで定義します。これは、すべてのページが利用できる共通の機能を共有します。

myApp.controller('myController', ['$scope', '$http', function ($scope, $http) {  
      $scope.sharedFunction = //...shared function stuff 
})'; 

また、特定のスコープ関数と変数をMVCの子ページに追加したいと考えています。子ページに行くと、私は同じ構文を使用するとコントローラが再定義されてしまうと思います。

myApp.controller('myController', ['$scope', '$http', function ($scope, $http) {  
     $scope.showOverlay = false; 
}]); 

どのように私はそれがとても体に定義されている同じコントローラが@RenderBody()を使用してレンダリングされた子ページでそれに追加ページの特定のアイテムを取得することができますか?宣言の

var app = angular.module("app", [myController]) 

第二の部分、あなたの角度アプリが依存していることを「依存関係」の配列で渡すことができます:あなたはそうは次のように、角度でモジュールとしてあなたの「アプリ」を定義する必要が

+0

これはASP.NET MVCの問題ではありません。それに応じて角度コードを設定する必要があります。 https://docs.angularjs.org/guide/controller#scope-in​​heritance-example –

答えて

0

ng-controllersをネストすることでこれを動作させることができました。 2番目のコントローラーはすべての最初のコントローラー関数を継承し、2番目のコントローラーでそれらを上書きして追加することができました。

0

に。これを行う

ng-app="app" 

にあなたのコントローラが利用できるようになります。この場合は、あなたのアプリがあなたの「myController」コントローラその後

あなたが作用する角度たいあなたのhtmlの一部に、この属性を使用するには含まれていますあなたの 'app'モジュールを利用しているページ

+0

を参照してください。それで、常にインポートされるスクリプトファイルでメインコントローラを定義します。私はそれをインポートし、そのページに表示するような依存関係を設定します。どのようにして$ scope.showOverlay = falseをそのコントローラに追加することができますか?スクリプトを使用する他のすべてのページは、$ scope.sharedFunctionにアクセスできますが、オーバーレイは1ページにのみ追加されています。 – SolidSnake4444

関連する問題