簡體   English   中英

Angular $ locationProvider與ASP.NET MVC路由

[英]Angular $locationProvider with ASP.NET MVC routing

我正在使用ASP.NET MVC處理路由(使用RouteCollection類)。 但我的前端是用角度寫的,在某些地方我想用Angular的$ location更改url,我希望它支持HTML5,所以我把這行添加到我的module.config:

$locationProvider.html5Mode(true);

但從那時起,似乎我的路由已由Angular處理。

例如我的SPA在mysite.com/user上,我希望使用Angular的$ location更改URL(例如,當用戶單擊tab url更改為mysite.com/user/tab而不重新加載時)。

但是當用戶從該頁面導航到任何其他頁面(例如mysite.com/other)時,我希望由ASP.NET MVC的路由處理。

現在發生的是我的url更改為mysite.com/other,但網站沒有導航到該頁面,即MVC路由不處理更改。

編輯

我沒有在Angular中定義任何路由,我添加$locationProvider.html5Mode(true);后,我的所有路由都在服務器端定義,服務器端路由剛剛工作$locationProvider.html5Mode(true);

不幸的是沒有。 如果您的角度SPA在foo.com上托管並foo.com了HTML 5模式, foo.com foo.com/spaRoute1將命中您的ASP.Net服務器並期望找到該路由(可能是controller = SpaRoute1 action = Index)。

您需要將默認路由設置為始終解析為負責提供SPA的控制器/操作。 同時定義您需要的任何其他路線,這些路線並非特定於您的SPA。

我對ASP.Net了解不多。 但是我用這樣的節點js解決了同樣的問題。

我通過推送API啟用服務器解決了同樣的問題。 基本上角度在客戶端渲染頁面並通過#找到確切的路徑。 你可以啟用html5模式刪除#

  $locationProvider.html5Mode({
    enabled:true,
    requireBase: false
});

請記住,不要忘記在服務器端啟用推送API支持。 只是添加

    //To suport push API 
    // Just for DEMO in your case it may be different
app.use('/admin/*', function(req,res){
  var user = req.session.user;
   res.render("adminView",{user:user});
});

這里當您在沒有#tag的情況下硬刷新或直接輸入瀏覽器。 服務器將呈現主頁(索引)頁面並加載您所需的所有文件。 之后,angular將為您處理所有路由,因為您已啟用html5模式,因此不再需要在url中添加#。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM