2016-10-12 3 views
5

私はTYPO3に任意のコンテンツページに挿入できるプラグインとして埋め込まれるangle2アプリケーション/ウィジェットを構築しています。これは、既にTYPO3によって設定された別のルートパス例えば:Angular2 htmlのベースURLから独立してアプリのルートパスを設定する方法

/page1/app 
/page/subpage/subpage/whatever 

グローバルベースURL(ベースHREF = ..)で終わる可能性があり、変更することはできないことを意味します。どのようにルートを正しく構築できるように、何らかの角度の接頭語を与えるにはどうすればよいですか? https://angular.io/docs/ts/latest/guide/router.html

答えて

10

実際には角度のある文書には解決策がありますが、見つけるのはかなり難しいです。 <base>タグを使用せずにベースURLを角度で設定することは可能です。
したがって、流体を使用してベースURLをグローバルJavaScript変数に設定して、それをアプリケーションモジュールで角度をつけて提供する必要があります。

流体:

<script> 
    var app_base_url = '<f:uri.page pageUid="{currentPageUid}" />'; 
</script> 

角度:この場合APP_BASE_HREFで

declare var app_base_url; 

import {Component, NgModule} from '@angular/core'; 
import {APP_BASE_HREF} from '@angular/common'; 
@NgModule({ 
    providers: [{provide: APP_BASE_HREF, useValue:app_base_url}] 
}) 
class AppModule {} 

https://angular.io/docs/ts/latest/api/common/index/APP_BASE_HREF-let.html

+1

この回答を投稿していただきありがとうございます – CBA

1

理由は、あなたのWebサーバがすでにURLを処理しているので、それはAngular2ルーティングに委任ではないということです。ここに記載されているよう

私は新しいルータを使用しています。これを克服するには、Angularで別のLocationStrategyを使用する必要があります。

は何が/page1/app/は、ウェブサーバーから提供され/page1/app/#/angular-controller//angular-controller/のようにルートを作成するHashLocationStrategyと呼ばれて探していることはあなたのAngular2アプリケーションロジックの最初の引数です。

は(例も同様にそこから取られた)そのことについてAngular2 documentation、より詳細な情報を確認、あなたのモジュール宣言(例えばapp.module.ts

import {Component, NgModule} from '@angular/core'; 
import { 
    LocationStrategy, 
    HashLocationStrategy 
} from '@angular/common'; 
@NgModule({ 
    providers: [{provide: LocationStrategy, useClass: HashLocationStrategy}] 
}) 
class AppModule {} 

を調整します。

+0

例はAngular 2.0に基づいていますが、まだRCレベルにいる場合は、最後に最初にアップグレードすることを検討してください。例えば、RC4とファイナルの間で多くの変更がありました。 –

+0

あなたの答えをありがとう、しかし私は本当に "本当の" URLを使用したいと思います。実際には、私はデフォルト戦略で動作するソリューションを見つけ、ここに掲載します。 – jdachtera

1

baseURL設定属性を使用しないように助言します。これは少し古く、あなたのようないくつかの問題につながります。

あなたはすべてのリンクが/今前に付加され、また動作します

config.absRefPrefix =/

を設定することができます。

+0

TYPO3 7.6以降、自動的に一致するパスを設定している 'config.absRefPrefix = auto'を使うことができます。しかし、これだけではAngular2ルーティングの問題は解決されません。 –

+0

ありがとう、しかし、私はそれが私の問題を解決するとは思わない。また、このTYPO3のインストールはかなり古く、この設定を変更することはできません。 – jdachtera

0

見て、基本的にAngular2で、上、次のようなプロバイダを上書きすることができますこれは、このcasを示すAngular.ioの例ですE:これはちょうど角のアプリケーション内で適用されます...

import {Component, NgModule} from '@angular/core'; 
import {APP_BASE_HREF} from '@angular/common'; 
@NgModule({ 
    providers: [{provide: APP_BASE_HREF, useValue: '/my/app'}] 
}) 
class AppModule {} 

だから、その場合にはAPP_BASE_HREF /私/アプリに置き換えられますので、あなたは別に、各モジュールのためにそれを行うことができます...角ドキュメント上のこれらのページを見ている詳細情報については

、:私は変数に関するエラーが出るので、私はデータ - を使用し、角度の最新バージョンでは

https://angular.io/docs/ts/latest/api/common/index/PathLocationStrategy-class.html

https://angular.io/docs/ts/latest/api/common/index/APP_BASE_HREF-let.html

1

代わりに

<body data-base-url="whatever/"> ... 

角度属性:

import {Component, NgModule} from '@angular/core'; 
import {APP_BASE_HREF} from '@angular/common'; 
@NgModule({ 
    providers: [{provide: APP_BASE_HREF, useValue:documnent.body.dataset.baseUrl}] 
}) 
class AppModule {} 
関連する問題