我想使用Angular UI-Router但是我需要它让任何url通过浏览器(并使浏览器导航页面)$stateProvider
中未定义(url)或$urlRouterProvider
。
我搜索了他们的文档,API等,但找不到这个的参考,除了我以前用过的$state.reload()
..
答案 0 :(得分:2)
更新:请参阅底部的更新。
根据您的评论,我假设以下内容:
foo.com/
foo.com/thing1
和foo.com/thing2
foo.com/admin
不幸的是,你不能通过"通过"就像你想要的那样。 :(
您的选择是:
foo.com/app
等子目录中。然后,您的应用会响应foo.com/app/thing1
和foo.com/app/thing2
等网址。
http://foo.com/#/
,并响应foo.com/#/thing1
和foo.com/#/thing2
等网址。然后,当您的用户访问foo.com/admin
时,该网址将会落入服务器并获取其中提供的任何应用。 注意:这适用于使用$routeProvider
的常规Angular路由以及Angular-UI的$stateProvider
。
<强>更新强>
为了让这个工作变得有效,你必须让网址改变发生在Angular的 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应用的 root 。如果用户从foo.com/
转到foo.com/thing1
到foo.com/admin
,则需要导航回foo.com/
以重新访问您的Angular应用。