0

私は、クライアント側に AngularJS を使用し、サーバー側に symfony 2 を使用するエディターで作業しています (symfony を使用することは、私の問題にとっては簡単だと思います)。

したがって、私の URL には 2 つの部分があります: - エディターにアクセスするための symfony 部分 - エディターに移動するための角度部分

ユーザーが (AJAX 経由で) 変更を保存するときに、symfony の部分を更新して、生成された ID を追加したいと考えています。したがって、次の js コード スニペットを使用して新しいルートを手動で作成します。

var newRoute = $location.protocol() + '://' + $location.host();

// Get symfony route (using FOSJSRouting)
newRoute += Routing.generate('innova_path_editor', {workspaceId: EditorApp.workspaceId, pathId: EditorApp.pathId});

// Add angular part
newRoute += '#' + $location.path();

$location.url($location.hash(newRoute));

生成されたルートをコンソールで印刷すると正しく表示され、ブラウザでコピーして貼り付けると、ページが正しく読み込まれます。

しかし、 で url を設定すると$location.url($location.hash(newRoute));、Angular は私を 404 ルートにリダイレクトしようとします。

手伝ってくれてありがとう。

編集

生成されたルートは:

http://localhost/Claroline/web/app_dev.php/innova_path/workspace/2/path/editor/37#/global

編集2

可能であれば、ページをリロードしたくありません。

4

1 に答える 1

1

別のページに移動したり、ページ全体をリロードしたりし$locationたいが、期待どおりに動作しない場合は、 にフォールバックする必要がありますwindow.location

変化する

$location.url($location.hash(newRoute));

location = newRoute;

アップデート:

最新のブラウザーをターゲットにしている場合はpushState()、html5 履歴 API を使用してページのリロードを回避できます。

変化する

$location.url($location.hash(newRoute));

$timeout(function() {
    history.pushState(null, null, newRoute);
}, 0);
于 2013-10-16T14:06:22.800 に答える