混合Angular2,Backbone和MVC路由

时间:2016-10-06 12:48:21

标签: asp.net-mvc angular backbone.js asp.net-mvc-5

我们有一个现有的MVC5 Web应用程序,大部分都使用Backbone和Backbone路由。当你到达网站时,它会加载原始的基本home / index.html,它会加载所有Backbone脚本等等。

我们正在推出Angular2(版本:2.0.1),并为我们的NgController提供了一个新的index.html页面。

目前,我们的应用程序使用哈希位置策略;一旦应用程序加载,路由就会控制URL,我们会从以下内容中获取:

http://blah.com/ng/#/reports

http://blah.com/#/reports

这通常很好,并且在角度应用内浏览会将网址更改为/#/ pageXyz等。 ...直到您尝试直接刷新或深入链接到后面的示例,其中浏览器在技术上只是去

http://blah.com

提供原始的Backbone索引页面。

解决此问题的选项有哪些?

  • 是否可以让Angular路由器使用ng控制器为路由添加前缀?或者
  • Backbone可以将任何/#/ *路由重定向到ng /#/ *页面吗?
  • 可识别Angular URL的MVC路由的某些特定映射? (虽然我认为#在网址上不会削减,所以在路由中不能匹配它们吗?)
  • 切换到HTML5网址会更好吗? (更适合MVC路由?)

一夜之间,Angular网站似乎已经获得incomplete teaser page来设置VS2015(注意:我们目前正在使用VS2013),并且在最底层让您处于悬崖边缘,似乎与问题相关:

  

关于路由应用程序的注意事项

     

如果此应用程序使用Angular路由器,浏览器刷新可能会返回404 - 找不到页面。看看地址栏。它是否包含导航网址("深层链接")?我们必须配置服务器以返回这些请求的index.html。在此之前,请删除导航路径并再次刷新。

提前致谢。

1 个答案:

答案 0 :(得分:0)

最终改变了Backbone路由。

优点:它有效并且只有两行:

#restore angular url
if location.pathname == '/' and location.hash.substring(0,2) == '#/'
    location.href = location.href.replace('/#/','/ng/#/')

缺点:在刷新/深层链接上,您将获得两个完整页面加载 - 首先进入主页/索引加载主干,然后进入重定向后的ng / index加载角度。

但是,考虑到所有事情,它的工作原理对我来说已经足够了。