2017-01-24 3 views
0

シナリオ:Angular2 Router - ベースHrefより前のルートを探していますか?

  • サイトの大多数のためのルーティングんサイトの後ろにCMSがあります。
  • SPAである サイトの特定のサブセクションを制御するAngular2アプリがあります。
  • Angular2アプリは内蔵のAngular2 Routerを使用して、 ルーティングを行います。ただし、サイトのAngular2セクションの を取り戻そうとした場合を除き、正常に動作しています。 Angular2部について角/ルーターバージョン3.4.0

@角度/コアバージョン2.4.0(その他、HTTPなど)、@

  • は、<base href>タグがパス場所に設定されていますAngular2がルーティングを引き継ぐことになっている(/ culture_code/subroute/angular_2_section/ルート

    <base href='/*culture_code*/*subroute*/*angular_2_section*/'> 
    

    platfor mBrowserDynamicバインディングには、<base href>タグと同じURLを設定したAPP_BASE_HREFの提供もあります(両方が必要な場合はわかりませんが、設定されていることを確認したい)。 :

    問題がculture_code/subroute/cms_handled_routeバック/ にユーザをもたらすであろう、ブラウザに戻ってクリックすると、角からルートモジュールが不明な経路(パスとして検出されることです'**')、ルーティングのベースhrefがそのURLで蹴られてはならないので、ルータからそれを壊す方法がわかりません。私はそれがその時点でバックCMSのルーティングに行きたいので、私は(場所を使用してみましたcms_handled_routeangular_2_sectionと同じレベルにあると<base href>angular_2_section

    後に開始する必要があります@ angle/commonから)back()を実行するが、それはまだ固まっているようだ。私は未知のルートにアクセスする際にCanLoad Guardのlocation.back()を置くことでこれを試しましたが、これを行うにはより良い方法が必要であると確信しています。

    import { Injectable } from '@angular/core'; 
    import { Route, CanActivate, CanActivateChild, CanLoad, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'; 
    import { Location } from "@angular/common"; 
    import { LoggerService } from '@shared2/services/logger.service'; 
    import { Observable } from 'rxjs/Observable'; 
    
    @Injectable() 
    export class RouteUnknownGuard implements CanLoad { 
        constructor(private location: Location, private loggerService: LoggerService) { 
        } 
    
        canLoad(route: Route): Observable<boolean> | boolean { 
         this.loggerService.log('Route Unknown - Change to Location routing: ' + this.location.path); 
         this.location.back(); 
         return false; 
        } 
    } 
    

    ここに何か不足していますか?不明なルート上の角度ルータに簡単に言えることはありますか?何もしないでください。

    ありがとうございました!

  • 答えて

    0

    最後に、問題はサイトのAngular2セクションではなく、むしろバックが行こうとしていたAngular 1.5セクションであることが判明しました。 Angular1セクションではルーティングは使用されていませんが、$ locationProviderを使用してページを再読み込みせずにURLを更新しています。これは、問題を引き起こしていたrewriteLinksオプションがあります。

    リンクを書き換えようとしましたが、Angular2ルータがサイトの分離された部分であるため、「このルートは存在しません」というメッセージが表示され、Angular2セクションにトラップされていました。この設定に関する詳細は、https://docs.angularjs.org/guide/$location#html-link-rewritingのHTML Link rewritingのドキュメントを参照してください。これはBack()でページをリロードするためにfalseに設定する必要がありました。 Angular 1.5セクションでは実際のルーティング機能を使用していないため、これまでに明らかな副作用がなくてもこれを実行できます。

    他の誰かが同じ問題を抱えている場合に備えて、このソリューションを投稿したかっただけです。

    関連する問題