我在控制器中使用$location
服务来启用深层链接。我的控制器做了这样的事情:
$location.path("/"+param);
$("title").text(param);
第二行在第一行完成后执行至关重要。否则,浏览器中的历史记录项将显示旧网址的新标题,而不是旧网址。 Google.com目前有此错误,请尝试从主页进行搜索,然后进行其他搜索,然后按住浏览器中的后退按钮并按最近的历史记录项,您将看到我的意思。
解决此问题的一种方法是:
$location.path("/"+param);
setTimeout(function() {
$("title").text(param);
}, 1);
......但这对我来说并不太好。所以我的问题是,一旦$location
单身人士完成了自己的事业,我该如何强有力地推迟第二行的执行?
答案 0 :(得分:0)
请注意,setter不会立即更新window.location。相反,$ location服务知道范围生命周期,并在范围$ digest阶段将多个$ location突变合并到window.location对象的“提交”中。
答案 1 :(得分:0)
我认为您正在寻找一种适合异步服务的方法(??)。在我看来,您希望查看承诺/延期实现,请参阅http://docs.angularjs.org/api/ng。$ q
“起初可能并不明显为什么这种额外的复杂性值得给它带来麻烦。收益来自于承诺和推迟apis的保证。”
希望这会有所帮助
- 丹