我們需要以非SPA模式加載一些頁面,而其他頁面則以SPA模式加載。例如,主頁和關於頁面應該是非SPA,而其他頁面應該是SPA。Angular JS - 非單頁路由SPA
$ locationProvider.html5Mode(true);使所有頁面SPA,即使路由未找到。不添加該行使所有頁面都不是SPA。
如何設置路由,以便如果路由不存在,應該從服務器獲取頁面?即不是推送狀態。
此外,我們正在使用ui路由器。
我們需要以非SPA模式加載一些頁面,而其他頁面則以SPA模式加載。例如,主頁和關於頁面應該是非SPA,而其他頁面應該是SPA。Angular JS - 非單頁路由SPA
$ locationProvider.html5Mode(true);使所有頁面SPA,即使路由未找到。不添加該行使所有頁面都不是SPA。
如何設置路由,以便如果路由不存在,應該從服務器獲取頁面?即不是推送狀態。
此外,我們正在使用ui路由器。
行,所以我調整了以前的答案,並找到了解決辦法
基本上,當服務器呼籲SPA或非SPA頁面,該頁面需要以某種方式表示,我選擇什麼樣的模式,它是在運行一個JavaScript變量爲
var html5mode = true;// for SPA, set to false for non SPA. Emit this from the server.
在您的routedefs.js或任何你有定義的路線。
// enable html5Mode for pushstate ('#'-less URLs)
if (html5mode) {
$urlRouterProvider.otherwise(function ($injector, $location) {
// reload if route not found.
window.location = window.location;
});
$locationProvider.html5Mode(true);
} else {
$locationProvider.html5Mode(false);
}
你可以$ locationProvider.html5mode(html5mode)並消除'其他'。只是說。 – Rap
使用ui路由器,您可以有其他狀態。在原本的狀態,你可以添加一個決心,可以做一個請求到服務器來處理路由:
$urlRouterProvider.otherwise("otherwise");
$stateProvider
.state('otherwise', {
url: '/otherwise',
template: 'some html',
resolve : {
serverPage: function servePage() {
//http request to the server to fetch and redirect.
}
}
})
這沒有奏效。出於某種原因,這會禁用html5Mode,然後一切都會觸發服務器。 – nsdiv
不知道爲什麼用「否則」狀態較早的答案沒有工作,因爲這似乎是有前途的。如果您有多個非spa頁面要去,並且您想要管理路由中的所有內容,那麼您也可以僅將一個函數傳遞給otherwise(),而不是定義一個單獨的狀態,如下所示:
$urlRouterProvider.otherwise(function($injector, $location){
// redirect here, for example…
window.location.href= window.location.origin + $location.url();
});
因此,如果用戶瀏覽下面的路線
http://mydomain.com/spa#/nonspa
它會被重定向到
(假設'nonspa'不在有效路線中)
也就是說,我可能只是直接鏈接到非spa頁面而不是通過路由代碼 - 看起來更簡單和更快。
不幸的是,這會導致無限重新加載。如果我直接點擊http://mydomain.com/nonspa,在頁面加載之後,否則執行函數,導致重新加載。 – nsdiv
會添加目標=「_自我」屬性錨標記允許你從SPA頁轉到非SPA頁?
我會說這樣的事情是不可能使用角度路由 – Dalorzo