77

私はhtml 5モードでangularjsを使用しています。ページ上のすべての href を制御しているように見えます。しかし、実際にはアプリ内ではなく、アプリの同じドメイン内にあるものへのリンクが必要な場合はどうすればよいでしょうか。例として、pdf があります。

私が行う場合<a href="/pdfurl">、angularはhtml5modeを使用しようとし、ルートプロバイダーを使用して、どのビューをロードする必要があるかを判断します。しかし、実際にはブラウザが通常の方法でそのページに移動することを望んでいます。

これを行う唯一の方法は、ルート プロバイダーでルールを作成し、それを window.location で正しいページにリダイレクトすることですか?

4

4 に答える 4

149

HTML5 モードでは、A タグが書き換えられない状況が 3 つあります

  • target属性を含むリンク。例:<a href="/ext/link?a=b" target="_self">link</a>
  • 別のドメインを指す絶対リンク Example: <a href="http://angularjs.org/">link</a>
  • baseが定義されているときに別のベース パスにつながる「/」で始まるリンクExample: <a href="/not-my-base/link">link</a>

あなたの場合は1になります。target="_self"

于 2013-05-30T13:47:57.683 に答える
7

Angular に href を制御させたくない場合。リンクにターゲット属性を配置します。

したがって、PDF は html5mode と routeProvider をバイパスし、ブラウザはその URL に移動します。

于 2013-05-30T13:40:44.433 に答える
4

その他の解決策。すべてのリンクは正常に機能します (ページをリロードします)。でマークされたリンクはng-href="/path"、pushState で再生されます。小さなJSハックがそれを助けます。

.config(["$locationProvider", function($locationProvider) {
    // hack for html5Mode customization
    $('a').each(function(){
        $a = $(this);
        if ($a.is('[target]') || $a.is('[ng-href]')){
        } else {
            $a.attr('target', '_self');
        }
    });

    $locationProvider.html5Mode(true);
}])
于 2015-10-20T10:00:37.210 に答える