具有ASP.NET MVC路由的Angular$locationProvider
Angular $locationProvider with ASP.NET MVC routing
我使用ASP.NET MVC(使用RouteCollection类(处理路由。但是我的前端是用angular编写的,在某些地方我想使用angular的$location更改url,并且我希望它支持HTML5,所以我在我的module.config中添加了这行:
$locationProvider.html5Mode(true);
但从那以后,我的路由似乎一直由Angular处理。
例如,我的SPA在mysite.com/user上,我想在那里使用Angular的$location更改url(因此,当用户单击选项卡时,url将更改为mysite.com/user/tab,而无需重新加载(。
但当用户从那个页面导航到任何其他页面(例如mysite.com/other(时,我希望通过ASP.NET MVC的路由来处理。
现在发生的情况是,我的url更改为mysite.com/other,但网站无法导航到该页面,即MVC路由无法处理更改。
编辑
我在Angular中没有定义任何路由,我所有的路由都是在服务器端定义的,在我添加$locationProvider.html5Mode(true);
后,服务器端路由就开始工作了
不,遗憾的是没有。如果您的角度SPA托管在foo.com
,并且HTML 5模式处于打开状态,则foo.com/spaRoute1
将访问您的ASP.Net服务器,并期望找到该路由(可能是控制器=SpaRoute1操作=Index(。
您需要将默认路由设置为始终解析到负责提供SPA的控制器/操作。同时定义您需要的任何其他路线,这些路线不是您的SPA特有的。
我对ASP.Net了解不多,但我用node 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});
});
当您硬刷新或在浏览器中输入不带#标签的直接url时,请在此处。服务器将呈现主页(索引(页面并加载所有必需的文件。之后,angular将为您处理所有路由,因为您已经启用了html5模式,因此不再需要在url中添加#。
- Angular JS IE9 Hashbang url rewriting
- 如何使用skip参数使用angular ui引导进行服务器端分页
- 在自定义mean.io包中使用angular-chart.js作为依赖项
- 无法在数据endVal中设置值=“”;{{ucount}}”;使用Angular JS的CountUp
- 使用angular重定向到html页面
- angular.js没有'无法在PhoneGap中处理视图标记
- Javascript(Angular)从一个对象数组到第二个数组查找值
- angular 1.5应用程序中的导航栏
- angular的下拉菜单
- Angular只从数组中获取所需的数据
- 如何将不可变的js导入angular 2(alpha)
- Angular js-返回一个包含类似
- 如何使用 Angular JS 将数据保存在数据库中
- 将JSON对象传递给angular指令
- 从HTTPGET返回一个自定义对象列表,以便在Angular 2应用程序中使用
- Angular:更新一次性绑定的数据
- 同步调用,直到用户通过angular验证为访问者
- 将Angular js与taglib结合使用
- 在Angular Fullstack中设置TinyMCE
- 可以't使用Angular解析/检索JSON