你如何确定angularjs $服务何时完成其工作?

时间:2012-06-24 12:25:54

标签: javascript angularjs

我在控制器中使用$location服务来启用深层链接。我的控制器做了这样的事情:

$location.path("/"+param);
$("title").text(param);

第二行在第一行完成后执行至关重要。否则,浏览器中的历史记录项将显示旧网址的新标题,而不是旧网址。 Google.com目前有此错误,请尝试从主页进行搜索,然后进行其他搜索,然后按住浏览器中的后退按钮并按最近的历史记录项,您将看到我的意思。

解决此问题的一种方法是:

$location.path("/"+param);
setTimeout(function() {
    $("title").text(param);
}, 1);

......但这对我来说并不太好。所以我的问题是,一旦$location单身人士完成了自己的事业,我该如何强有力地推迟第二行的执行?

2 个答案:

答案 0 :(得分:0)

AngularJS: Using $location

  

请注意,setter不会立即更新window.location。相反,$ location服务知道范围生命周期,并在范围$ digest阶段将多个$ location突变合并到window.location对象的“提交”中。

答案 1 :(得分:0)

我认为您正在寻找一种适合异步服务的方法(??)。在我看来,您希望查看承诺/延期实现,请参阅http://docs.angularjs.org/api/ng。$ q

  

“起初可能并不明显为什么这种额外的复杂性值得给它带来麻烦。收益来自于承诺和推迟apis的保证。”

希望这会有所帮助

- 丹