我正在Angular中尝试一些东西并且让我挠头,但我已经看过多次发布已经完成的事情。
我想要的是将浏览器中的网址保持为静态:http://domain.com/
在我的应用程序中,当页面初始化时继续执行
$location.path('/home').replace();
这会将我的网址更改为http://domain.com/#/home
该页面正在IIS中托管,所以我尝试了第一次重写规则,但是那些虽然规则有效并且被困住但不起作用的规则。
在主页上我添加了一个触发以下功能的按钮:
function changeURL() {
if (typeof (history.replaceState) != "undefined") {
history.replaceState(null, null, "/");
console.log("URL changed");
} else {
console.log("URL cannot be changed");
}
}
这是完美的!我的网址现已更改。但是在我的javascript中:
$scope.$watch('$viewContentLoading', function () { changeURL(); });
页面加载后,网址会暂时更改为http://domain.com/#/home
(我可以在地址栏中看到它闪烁)然后转到http://domain.com/#
我相信,由于浏览器首先需要执行并加载$location.path
,changeURL()
将在$location.path
完成后立即运行。即使我在$viewContentLoading
仍在进行中时尝试更改。
我试着看看是否可以在$location.path
完成期间或之前更改时间。
我尝试在以下事件中插入changeURL()
并成功:
$rootScope.$on('$locationChangeStart')
$rootScope.$on('$locationChangeSuccess')
$browser.onUrlChange()
我也尝试使用以下代替$location.path()
:
$state.transitionTo('^', { reload: false, inherit: false, notify: false })
$state.go('^', null, { reload: false, inherit: false, notify: false })
也可以在preventDefault()
上$locationChangeStart
进行阅读并进行一些操作但不确定如何执行此操作。
任何帮助将不胜感激!
提前致谢!