0

コントローラー内でサービスを使用して$locationディープリンクを有効にしています。私のコントローラーは次のようなことをします:

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

最初の行の後に 2 行目の実行が終了することが重要です。そうしないと、ブラウザ内の履歴項目に、古い URL の代わりに古い URL の新しいタイトルが表示されます。現在、Google.com でこのエラーが発生しています。ホームページから検索してから、別の検索を試してから、ブラウザの [戻る] ボタンを押したまま、最新の履歴項目を押してください。意味がわかります。

これを修正する 1 つの方法は次のとおりです。

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

...しかし、それは私にはあまりうまくいきません。$locationだから私の質問は、シングルトンがそれ自身のビジネスを終えたら、どのようにして2行目の実行を確実に延期するのですか?

4

2 に答える 2

0

一般的に非同期サービスに適合する方法論を探していると思います (??)。http://docs.angularjs.org/api/ng .$qを参照してください 。

「最初は、なぜこの余分な複雑さに苦労する価値があるのか​​ 明らかではないかもしれません。その見返りは、promise および deferred api が行う保証の邪魔になります。」

お役に立てれば

――段

于 2012-06-26T16:51:10.273 に答える
0

AngularJS: $location の使用

セッターは window.location をすぐには更新しないことに注意してください。代わりに、$location サービスはスコープのライフサイクルを認識し、スコープの $digest フェーズ中に複数の $location ミューテーションを window.location オブジェクトへの 1 つの「コミット」に結合します。

于 2012-06-24T12:54:14.067 に答える