2017-10-13 9 views
0

システムは角度4にシステムを変換しています。変換には時間がかかるので、コンポーネントを1つずつ角度に変換して角度の折り返しを入れたいと考えていました私たちの古いページは、新しい角型コンポーネントと組み合わせて実行されます。現在のシステムでは、複数のフレーム、ヘッダー、ナビゲーション、ワーキングエリアで実行されます。私たちは新しい角度システムでフレームを取り除いています。古いシステムと新しい角度4のフロントエンドとのインタフェース

私たちの古いシステムは、主に作業領域の内容を、サーバー上で完全に構成された新しいhtmlページに置き換えています。

私はcomponent.htmlからiframeを起動し、そのフレーム上の何かにonClickをキャッチするリスナーをアタッチするコードを見てきました。古いシステムからのそれらのクリックアクションを評価し、href(etc ..)が新しい角度ルータにそれを使用したり再ルーティングしたりすることを許可するかどうかを決定したいと思っています(this.router.navigate([/customer '])))、要求されたイベントを停止します。私はこの機能のほとんどを動作させることができますが、新しい関数が実行されるときにコンポーネントの必要な部分にアクセスすることができない場合、メソッドとプロパティは見つかりません。 (st.replace()、str.match()など)は、regexpと組み合わせて使用​​される通常のjavascriptメソッドですが、router.navigateなどのコンポーネントに含まれるプロパティも含まれます。

これは実行できますか?これを達成するより良い方法は?

私は同じ状況に踏み込んだalt-angularjs-migration-using-iframes-demoも見てきました。ここで

私は現在、これを行うにしようとしています方法です:

contact.component.html

<div class="iBody1" (click)="onRightClick($event)">  
<iframe #iframe [src]="'https://www.volgistics.com/ex/Cp.dll?ACT=7' + 
urlUserStr | safeUrl" (load)="myFunction()" 
id="work1" name="WorkArea" scrolling="no" marginwidth="0" marginheight="0" 
frameborder="no" > 


<p>Your browser does not support iframes.</p> 
</iframe> 
</div> 

contact.component.ts

myFunction() { 
let doc = this.iframe.nativeElement.contentDocument ||this.iframe.nativeElement.contentWindow; 
if (typeof doc.addEventListener !== undefined) { 
    doc.addEventListener("click", this.iframeClickHandler, false) 
} else if (typeof doc.attachEvent !== undefined) { 
    doc.attachEvent("onclick", function (this) {this.iframeClickHandler(this)}) 
} 
} 

iframeClickHandler(e): void { 
e.preventDefault(); 

let vars : string = e.target; 

let rx = new RegExp("([^?=&]+)(=([^&]*))?", "g"); 

let xx = rx.exec(vars); 

// let var1 : String = vars.match(/(\?|\&)([^=]+)\=([^&]+)/g).toString(); // match is undefined if used 
// let var2 : String = JSON.parse('{"' + decodeURI(var1.replace(/\?/g, "").replace(/&/g, "\",\"").replace(/=/g,"\":\"")) + '"}') // replace is undefined if used 

    this.router.navigate(['/customer/100100109']);  // Uncaught TypeError: Cannot read property 'navigate' of undefined 
} 

事前に任意の助けてくれてありがとう。 Rob Thompson

答えて

0

私はこれが何らかの方法で役立つかどうかはわかりませんが、Angleのルーティングを無視して古いサーバーサイト生成のhtmlをゆっくりと置き換えることで、既存のアプリケーションの上にスプライス角度をつけることで、角度成分を伴う。

私があなたのケースを正しく理解している場合は、iframe内のhrefを使ってangularJSのページに移動します。我々が使用されるアプローチは、我々は実際にそれがページに移動させたいし、そのページのHTMLだけで変換が完了したら

私たちのコンポーネントを表示していました

<our-new-component></our-new-component>

になりました、あなたは完全な角度に切り替えることができます。ルーティング。

関連する問題