我们需要以非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