2016-07-27 50 views
0

我使用ocLazyLoad庫懶負荷角度的JavaScript/HTML文件,並將其注入到我的模塊這樣的代碼片段的HTML渲染的剃刀:如何從angularjs與ngRoute

$routeProvider.when('/Home/Index', { 
     templateUrl: '/app/Index.html', 
     controller: 'IndexController', 
     resolve: { 
      deps: [ 
       '$ocLazyLoad', function ($ocLazyLoad) { 
        return $ocLazyLoad.load({}, { 
         name: 'mix', 
         files: [ 
          '/app/IndexController.js' 
         ] 
        }); 
       } 
      ] 
     } 
    }); 

通過這種方法,我得到的靜態來自文件系統的html文件。但是我想要的是設置templateUrl:'/ Home/Index',所以Home控制器中的索引操作方法得到執行,剃鬚刀呈現指定的.cshtml頁面,然後用角度指令返回html。

這是我想要做的。 Razor視圖:從服務器

<p> 
    @foreach (var item in new List<int> { 1, 2, 3, 4, 5 }) 
    { 
     @item 
    } 
</p> 

<div ng-controller="IndexController as vm"> 
    <p>{{vm.text}}</p> 
    <p>{{3 + 3}}</p> 
</div> 

響應:

<p>12345</p> 
<div ng-controller="IndexController as vm"> 
    <p>{{vm.text}}</p> 
    <p>{{3 + 3}}</p> 
</div> 

隨着這個網站,延遲加載IndexController.js 然後將角做它的工作。

有沒有可能這樣做?

回答

0

是的,有可能做到這一點。所有你需要做的就是記住基礎知識。除非你暴露它,否則Angular不知道你的服務器端。

$routeProvider.when('/ng-Home/Index', { //It can't be the same as the Action URL since it won't work the way you want it to. 
    templateUrl: '/Home/Index', //Add the html of your static page into the razor view. 
    controller: 'IndexController' 
    } 
}); 

在內部,角將從服務器側或者是一個普通的HTML文件或HTML從服務器輸出(一個HTML響應,而不是JSON或XML)調用。 Angular不關心它是否是文件或響應HTML。路由將簡單地採取響應HTML並輸出它。

通常這可能會變得混亂,因爲並非所有Razor生成的HTML都符合處理模型的角度方式。但它可以幫助您實現一些方便的功能,例如使用ASP.NET中的捆綁和縮小。或者直接在HTML中添加局部視圖。

在你的Razor視圖,您可以添加您的JS文件的方式如下:

@Scripts.Render("~/Path/To/Script") 

希望它能幫助!