我想使用Angular UI-Router,但是我需要它让任何URL通过浏览器(并使浏览器导航页面),而不是在$stateProvider
或$urlRouterProvider
中定义(url)。UI-Router在没有定义状态时让URL通过
我已经通过他们的文档,API等搜查,但找不到此引用,除了$state.reload()
我以前用过..
我想使用Angular UI-Router,但是我需要它让任何URL通过浏览器(并使浏览器导航页面),而不是在$stateProvider
或$urlRouterProvider
中定义(url)。UI-Router在没有定义状态时让URL通过
我已经通过他们的文档,API等搜查,但找不到此引用,除了$state.reload()
我以前用过..
更新日期:更新在底部。
从您的意见,我假设如下:
foo.com/
foo.com/thing1
和foo.com/thing2
foo.com/admin
不幸的是,你不能像你想要的那样有一个url“通过”。 :(
的选项有:
foo.com/app
的一个子目录,您的应用程序将像foo.com/app/thing1
和foo.com/app/thing2
网址回应
http://foo.com/#/
,并回复如foo.com/#/thing1
和foo.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/thing1
到foo.com/admin
他们将需要导航回到foo.com/
回到你的Angular应用程序。
有趣。这是可以添加到角?或者它有什么影响,例如角度被永久绑定来监听url更改 –
使用新解决方案更新了答案。 –
我有我的服务器应用程序设置为呈现其中加载角度的视图..所以它是好的,如果他们回到/ thing1,他们仍然会得到加载角度和角度的视图将知道url/thing1。谢谢 :)。这段代码解决了这个问题 –
你想让通过使用散列的网址?此外,您的应用程序是否使用HTML5路由模式或自定义哈希前缀? –
HTML5路由模式 –
您能否提供1)应用程序应该处理的url以及2)应用程序不应处理的url的示例? –