2017-03-06 49 views
1

我有一個MVC應用程序,它有一個主佈局,裏面有@RenderBody(),它呈現單個頁面的主體。在主佈局中,我給了body標籤一個angularjs應用程序名稱和控制器名稱。AngularJS MVC Razor - 如何在多個文件中定義單個控制器?

我想要在單獨的全局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()?

+0

這不是ASP.NET MVC關心的問題。您需要相應地設置您的Angular代碼。請參閱:https://docs.angularjs.org/guide/controller#scope-in​​heritance-example –

回答

0

我得到這個嵌套ng控制器的工作。第二個控制器繼承了所有的第一個控制器功能,我可以覆蓋它們並添加到第二個控制器中。

0

您需要定義您的「應用」爲角模塊,像這樣:

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

宣言的第二部分,您可以在「依賴」,你的角的應用程序依賴的傳遞數組上。在這種情況下,你的應用程序將包括你的「myController的」控制器

然後在要角時採取行動HTML的部分使用這個屬性:

ng-app="app" 

這樣做會讓你的控制器提供給任何利用你的'app'模塊的頁面。

+0

因此,讓我們說我定義主控制器在一個腳本文件,總是被導入。我將其導入並設置您爲該頁面顯示的依賴項。然後,我如何將$ scope.showOverlay = false添加到僅存在於我所在頁面的控制器,而不是全部?使用該腳本的所有其他頁面都可以訪問$ scope.sharedFunction,但不能覆蓋該頁面,因爲該頁面只添加在一個頁面上。 – SolidSnake4444

相關問題