2016-05-10 50 views
0

在我的應用程序中設置ngRoute會產生問題。許多視圖中使用的控制器都依賴於從ASP.NET控制器中的數據庫獲取的腳本。這裏有一個例子:ngRoute控制器在ASP.NET MVC中形成局部視圖

角應用

var app = angular.module("app", ["ngRoute"]) 
    .config(["$routeProvider", "$locationProvider", function($routeProvider, $locationProvider) { 
     $routeProvider 
      .when("/Template/:id", { 
       templateUrl: function(arg) { return "/User/Template/Details/" + arg.id }, 
       controller: "FormController" 
      });     
     $locationProvider.html5Mode(false).hashPrefix("!"); 
    }]); 

Razor視圖Details.cshtml:

@{ 
    Layout = null; 
} 
<head> 
    <script type="text/javascript"> 
     alert('triggered'); 
     angular.module("app").controller("FormController", ["$scope", function ($scope) { 
      alert("not triggered"); 
      $scope.xyz = 1; 
     }]); 
    </script> 
</head> 
<div id="template-details" class="col-xs-12" ng-controller="FormController" ng-cloak> 
    <span>{{xyz}}</span> 
</div> 

它加載的看法就好了,只是它不啓動控制器(與ViewBag代碼)。腳本塊執行得很好(用第一個alert()進行測試)。

+1

檢查瀏覽器控制檯是否有任何錯誤。 – Zaki

+0

它說FormController不是一個函數,並得到undefined –

回答

0

幾件事情要記住,當你controller is undefined

  1. 請務必與前FormController腳本
  2. 確保您FormController DIV裏面ng-app="app"divAngular App被加載。
  3. 確保您在angular之後加載ng-route

我已經創建了一個JsFiddle從你提供的,它工作正常。

+0

嘿扎基,感謝您的答案。但是,您可以在.js文件中定義控制器,但是我想在.html視圖中加載控制器。而且,控制器內容是使用ASP.NET MVC控制器從數據庫動態生成的。至於你的事情要記住。在AngularJS路由中,並不是應用程序只啓動一次的整點?所以我認爲它之前加載。該控制器肯定是在應用程序內。我怎樣才能檢查我是否在正確的時間加載ngRoute?因爲我已經在應用程序啓動中設置了配置(我認爲很好) –

+0

從何處加載內容也無關緊要控制器保存在哪裏並不重要js/html - 儘管從可維護性角度看它應該是在分開。至於mvc中的ngRoute,使用腳本部分標籤來確保它在之前被加載。 – Zaki

相關問題