2013-06-26 2 views
5

私はいくつかのページでAngularを大量に使用するDjangoアプリケーションで作業しています。 at domain.com/myAngularAppラウンドトリップルーティングと並んで角度ルーティングを使用する

角度のあるページ内では、角度ルーティングを使用してそのページ内のさまざまなビュー/状態をナビゲートしています。しかし、ウェブサイト全体には、Djangoへの往復要求が必要なナビゲーションリンクがあります。しかし、すべてのページには、Angularルート宣言を含む同じコンパイル済みのjavascriptファイルが含まれています。

私の質問は、Angularが独自のルートを管理する方法と、明示的に存在していないパスに(主にページのリンクをクリックして)場所が変更されたときに途絶えることですすなわち、ドメイン外の異なるサブディレクトリに所有権を持ちます。以下のような

myApp.config(function($locationProvider, $routeProvider) { 
    $locationProvider.html5Mode(true); 
    $routeProvider.when('/myAngularApp/', { 
    templateURL: 'template1.html' 
    }); 
    $routeProvider.when('/myAngularApp/stuff', { 
    templateURL: 'template12.html' 
    }); 
    $routeProvider.otherwise({redirectTo: <not sure what to do here...> }); 
}) 

私が試した何か:

マイルーティングの宣言は次のようになります

$routeProvider.otherwise({redirectTo: function(a1,r,a3){ window.location.href = r }}) 

をしかし、これは、任意の非マッチしたルート上に延々とページの更新を行います。

else文を残しておくと、直接アクセスしたときに一致していない経路を持つページを残すことができなくなっているように思われます。

私は何もしたくないのですか?

+0

私はどんな解決策を見つけましたか...でも、私は同じ問題があります。私を更新してください。ありがとう:) –

+0

私は私自身の非貪欲なルーティングサービスを作成中ですが、私は部分的にグローバルナビゲーションリンクを除外するdomの角度アプリの範囲を減らすことによって問題を解決することができます: – Nat

答えて

4

解決策を見つけた可能性があります。私は似たようなことをしています。それは、ページの一部に角度をつけた複数ページの角度サイトです。ここに私がやっていることがあります

var app = angular.module('appname', ['ui.bootstrap', 'ui.autocomplete']) 
.config(['$locationProvider', '$routeProvider', function($locationProvider, $routeProvider) { 
    $locationProvider.html5Mode(true); 
    $locationProvider.hashPrefix('!'); 
}]) 
.run(function($rootScope, $location) { 
    var redirected = false; 
    $rootScope.$on('$locationChangeStart', function(event, nextLocation, currentLocation) { 
     if(!redirected && $location.path() !== '/current-url') { 
      redirected = true; 
      event.preventDefault(); 
      window.location = $location.path(); 
     } 
    }); 
}); 

私は次にcurrent_ urlパスを渡す方法です。私が考えている方法の1つは、ビューにそのデータを設定するためのng-initです(私はexpress.jsを使用していますので、Jadeを使用します)。または、おそらく実行機能では、最初のパスを取得し、それに対してテストします。

event.preventDefault()は、ブラウザヒストリに余分なアイテムを追加するのを止めるためのものです。私がそれをする前に、角度のついたページに戻るために2度打ち返さなければなりませんでした。

注:これはまだIE8でテストされていません。私は今それを行い、それがどのように見えるかを見るつもりです。

更新私はIE8でこれをテストしましたが、リダイレクトループが発生しました。私はリダイレクトしたかどうかを確認するための単純な変数を持つようにコードを更新しました。仕事をしているようだ。私はもっ​​ときれいな方法を知りたいです。

関連する問題