2013-12-23 12 views
3

我想使用Angular UI-Router,但是我需要它让任何URL通过浏览器(并使浏览器导航页面),而不是在$stateProvider$urlRouterProvider中定义(url)。UI-Router在没有定义状态时让URL通过

我已经通过他们的文档,API等搜查,但找不到此引用,除了$state.reload()我以前用过..

+0

你想让通过使用散列的网址?此外,您的应用程序是否使用HTML5路由模式或自定义哈希前缀? –

+0

HTML5路由模式 –

+0

您能否提供1)应用程序应该处理的url以及2)应用程序不应处理的url的示例? –

回答

2

更新日期:更新在底部。

从您的意见,我假设如下:

  • 你的角应用家住在域的根foo.com/
  • 您使用HTML5模式,使您的应用程序响应像“自然”的网址foo.com/thing1foo.com/thing2
  • 你有一些其他应用程序(不是你的主角度应用程序)是住在foo.com/admin

不幸的是,你不能像你想要的那样有一个url“通过”。 :(

的选项有:

  • 将您的应用程序角到像foo.com/app的一个子目录,您的应用程序将像foo.com/app/thing1foo.com/app/thing2网址回应
    • 这真的是唯一的选择,如果你。想要使用HTML5路由模式来获得“自然”寻找网址
  • 关闭HTML5路由模式,以便您的Angular应用程序在http://foo.com/#/,并回复如foo.com/#/thing1foo.com/#/thing2的网址。然后,当你的用户访问foo.com/admin时,该URL将落入服务器并获取在那里提供的任何应用程序。

注:这适用于使用$routeProvider以及采用了棱角分明的UI的$stateProvider两个规则的角路由。

UPDATE:

为了得到这个工作,你必须得到的URL变化发生outstide的角度。以下是一种可行的方法,但它对IMO来说有相当的气味,可能会非常脆弱,难以维护。

angular.module('myApp', []) 
    .run(function($rootScope, $window){ 
     $rootScope.$on('$locationChangeStart', function(event, newUrl, oldUrl){ 
     // You'll probably want to just watch the path and build the full url 
     // based on your environment, but this will get you started. 
     if(newUrl === 'http://127.0.0.1/admin') { 
      // prevent Angular from continuing with the location change 
      event.preventDefault(); 
      // $window is an Angular wrapper around the global ``window`` object. 
      // This causes the browser to go to the new url outside of Angular 
      $window.location.href = newUrl; 
     } 
     }); 
}); 

当然这个工作您的服务器必须安装在/admin路径担任一些其他的应用程序。此外,当您的用户导航回到您的Angular应用程序它将失去所有状态,因为Angular应用程序将再次启动新的。另外,你的用户将不得不导航回你的Angular应用程序的。如果用户从foo.com/foo.com/thing1foo.com/admin他们将需要导航回到foo.com/回到你的Angular应用程序。

+0

有趣。这是可以添加到角?或者它有什么影响,例如角度被永久绑定来监听url更改 –

+0

使用新解决方案更新了答案。 –

+0

我有我的服务器应用程序设置为呈现其中加载角度的视图..所以它是好的,如果他们回到/ thing1,他们仍然会得到加载角度和角度的视图将知道url/thing1。谢谢 :)。这段代码解决了这个问题 –

相关问题