2016-04-01 4 views
0

UIルーターとExpressでAngularを使用しています。UIルータのバックボタンは、index.htmlのすべてのアセットを再リクエストしますが、接頭辞はhtml5modeです。

私は

$locationProvider.html5Mode(true);を設定して、私のindex.htmlファイルの<head><base href="/">を持っています。

私のサーバーでは、リクエストが既存のAPIまたはアセットのいずれかと一致しない場合はindex.htmlというキャッチオールルートがあります。

app.route('/*') 
    .get(function(req, res) { 
     console.log('the req.url', req.url); 
     console.log('sending index.html', path.resolve(app.get('appPath') + '/index.html')); 
     res.sendFile(path.resolve(app.get('appPath') + '/index.html')); 
    }); 

これは非常にうまくいきます。ユーザーは$state.goを使用して状態をナビゲートし、ブラウザの更新ボタンでこれらの状態を更新することができます。私はその後、stateCに、その後stateBに、その後stateAに移動した場合

しかし、アプリが正常に戻っstateBに移行browser back buttonをヒットし、その後index.html内のすべてのアセットのためのAJAX要求を行うが、stateB結果のためにルートで始まりますアプリケーションをクラッシュさせるエラーの長いストリームです。

enter image description here

これらのエラーは、ここに...私のサーバーは、何度も何度もindex.htmlを送信することにより、これらの要求に応答しているとの要求が.jsファイルのためのものであるという事実に起因しているサーバーのログ

です私はindex.htmlを送信した後、フロントエンドはindex.htmlにすべての資産に対する要求を行いますが、ルートで始まるので、私はonboard-introbower_components/*研の要求を取得していますかenter image description here

予告ead of bower_components/*/onboard-introを指しているときにブラウザをリフレッシュすると、これは起こらないことに注意してください。私は単純に1つのリクエストを受け取り、index.htmlを送信して動作します。

enter image description here

私は研究の多くの時間を行っていると、このような状況にマッチした別のSO質問を見つけることができませんでした。助けが大いにありがとう!

答えて

0

私はこの問題を解決しました。

私はタッチイベントを処理するプロジェクトにjQuery mobileを含めるということが起こっていました。 jQuery mobileclient side routingを処理し、UI Routerと競合していました。私は、著者はBackboneために、このソリューションを実装しているが、それはまたAngularのために働く、ここ http://www.mindfiresolutions.com/How-To-Disable-jQuery-Mobile-Routing-While-Working-Along-With-BackboneJS-2626.php

をルーティングjQuery mobileさんを無効にする方法についての記事を見つけました。あなたがする必要があるすべてはあなたの角度のプロジェクトにjQuery mobileを含める

$(document).bind("mobileinit", function() { 

    $.mobile.ajaxEnabled = false; 

    $.mobile.linkBindingEnabled = false; 

    $.mobile.hashListeningEnabled = false; 

    $.mobile.pushStateEnabled = false; 

}); 

BEFOREを実行しています。これにより、jquery mobileクライアント側ルーティングが無効になり、UI Routerがその処理を実行できるようになります。

関連する問題