Angular 7の間にデータを投稿して2つのルート間をナビゲートしたいのですが、URLにこれらのパラメーターを表示したくありません。適切な方法でそれを行う方法はありますか?
この瞬間、私はこのようなものに苦労しています:
this.router.navigate(['/my-new-route', {data1: 'test', test2: 2323, test: 'AAAAAAA'}]);
それは私のURLをに変更します
http://localhost:4200/my-new-route;data1=test;test2=2323;test=AAAAAAA
uRLからこれらのデータをキャンセルする方法:
http://localhost:4200/my-new-route
編集:
私の場合:
/ formルート-ユーザーは手動で入力する空のフィールドを持つフォームを持っています
/ optionsページには、ユーザーが選択したものが/ formにナビゲートされ、フィールドが自動的に入力されるときに、いくつかのプリセット構成があります
別のページに戻って/ formに戻ると、空のフォームが表示されます。/optionsから/ formへのリンクのみがこれらのフィールドに入力する必要があります。
サービスを作成して、両方のコンポーネント(移動元のコンポーネントと移動先のコンポーネント)間で共有できます。
サービス内でURLに渡すすべてのパラメーターを宣言し、router.navigate([])
の前に、サービス内のパラメーターの値を設定します。
そのサービスを使用して、他のコンポーネントからこれらのパラメーターにアクセスできます。
例:
SharedService
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class SharedService {
data1;
test2;
test;
}
コンポーネント1
import { SharedService } from 'location';
import { Router } from '@angular/router';
...
constructor(private _sharedService: SharedService,
private _router: Router) { }
...
this._sharedService.data1 = 'test'
this._sharedService.test2 = 2323;
this._sharedService.test = 'AAAAAAAA';
this._router.navigate(['/my-new-route']);
...
コンポーネント2
import { SharedService } from 'location';
...
private test2;
private test;
private data1;
constructor(private _sharedService: SharedService){ }
ngOnInit() {
this.data1 = this._sharedService.data1;
this.test2 = this._sharedService.test2;
this.test = this._sharedService.test;
...
}
いくつかの方法があります。
試行1:
this.router.navigate(['/some-url'], { queryParams: filter, skipLocationChange: true});
試行2:
代わりにEventEmitterとBehaviorSubjectを共有サービスで使用することで、この回避策を使用できます
コンポーネント1:
this.router.navigate(['url']).then(()=>
this.service.emmiter.emit(data)
)
稼働中:
emmiter : EventEmitter = new EventEmitter();
コンポーネント2:内部コンストラクター
this.service.emmiter.subscribe();