2013-07-07 55 views
-2

這裏是我的路線......Angular JS模板可以包含控制器嗎?

angular.module('ng'). 
    config(function ($routeProvider) { 
     $routeProvider. 
      when('/User_View', { templateUrl: '/rest/tbot/run/User_View' }); 
    }); 

在它具有以下模板...

<div ng-controller="TMUser"> 

TMUser在腳本塊模板定義。但是控制器中的代碼似乎不運行。爲什麼是這樣?

+0

除非你做的事情有點不尋常,否則你在templateUrl中缺少「.html」? – altschuler

+0

Url在服務器上重寫。 –

回答

2

控制器不應該在模板文件中定義。我不認爲Angular可以知道它並以這種方式加載。將其定義在將在路由更改發生之前執行的代碼文件中。

您還可以指定在routeProvider配置對象的控制,如:

when('/User_View', { templateUrl: '/rest/tbot/run/User_View', controller:'TMUser' }); 

This fiddle演示了一個非常簡單的例子(source

+0

然後不是非常模塊化。如果我有一個由一百頁組成的單頁應用程序會怎麼樣......這是否意味着我需要在主頁中加載一百頁的腳本? –

+0

你可以使用像RequireJS這樣的東西來加載你的模塊。但是,除非您爲這幾百頁中的每一頁都有一些獨特和長的控制器代碼(這是極不可能的),通過Google Closure最小化和優化將爲您帶來很大的幫助 – altschuler

+1

這是一個演示概念的示例應用程序:https:// github.com/ifyio/angularjs-lazy-loading-with-requirejs-optimisation – altschuler

1

上面的回答是正確的。 但我使用ng-include和ng-hide實現了相同的功能,ng-view和routing是什麼。

我創建了一個沒有控制器的局部頁面,並將它包含在父頁面中,並在單擊按鈕後隱藏了局部頁面,我只是顯示頁面。

路由在那裏有好處。您可以傳遞參數並根據瀏覽器歷史記錄更改視圖。

這是我的頁conatins下面的代碼裏面的子控制器。

<span ng-include="'/PartialPages/ChangeDetails.htm'"></span> 

這是指我parital頁

<div id="ChangeInfo" ng-show="datashow"> 
     <table width="100%"> 
     <thead> 
     <tr> 
      <th>File Name</th> 
      <th>File Create Date</th> 
      <th>File Modified Date</th> 
     </tr> 
     </thead> 
     <tbody> 
     <tr ng-repeat="file in FilesDetails" ng-class="{TableStrip : ($index % 2)}"> 
     <td>{{file.FileName}}</td> 
     <td>{{file.CreateDate}}</td> 
     <td>{{file.ModifiedDate}}</td> 
     </tr> 
     </tbody> 
     </table> 
     <hr /> 
    </div> 

和控制器代碼

var deploymentVerifierModule = angular.module("DeploymentVerifierApp", ['DeploymentServiceModule']); 

deploymentVerifierModule.controller("DeploymentVerifierCntrl", function ($scope, DeploymentService) { 
    $scope.datashow = false; 
    $scope.PleaseWait = false; 
    $scope.VerifyChange = function() { 
     //Get the Change ticket number from textbox 
     $scope.PleaseWait = true; 
     var changeticketnum = document.getElementById("ChangeNumber").value; 
     DeploymentService.GetChangeDetails(changeticketnum).then(function (data) { 
      $scope.FilesDetails = angular.fromJson(data); 
      $scope.PleaseWait = false; 
      $scope.datashow = true; 

     }, function (error) { }); 
    }; 
}); 

我仍然沒有得到您的一些觀點爲什麼你要控制器作爲模板。而且templateurl屬性也包含頁面的擴展。

+0

我想要模板中的控制器,以便只在需要時才加載JavaScript。如果頁面沒有擴展名,templateurl不包含擴展名。 ;) –

相關問題