Angular 2ルーターで現在のルートをリロードする方法


141

私はhashlocation戦略でangular 2を使用しています。

コンポーネントはそのルートで読み込まれます:

"departments/:id/employees"

これまでのところ結構です。

編集した複数のテーブル行をバッチ保存した後、次の方法で現在のルートURLを再ロードします。

this.router.navigate([`departments/${this.id}/employees`]);

しかし、何も起こりません、なぜですか?


同様の質問に対するこの回答を見てください:stackoverflow.com/a/44580036/550975
Serj Sagan

回答:


46

navigate()がブラウザーのアドレスバーに既に表示されているURLを変更しない場合、ルーターは何もする必要がありません。データを更新するのはルーターの仕事ではありません。データを更新する場合は、コンポーネントに挿入されたサービスを作成し、サービスでロード機能を呼び出します。新しいデータが取得される場合、バインディングを介してビューが更新されます。


2
今あなたは私が同意しなければならないことを言います... angularjs uiルーターには再読み込みオプションがあり、ルートの再読み込みは有効です;-)しかし、ええ私は実際に明らかなそのヒントのためにデータ再読み込みを行うことができました...
Pascal

83
警備員を再実行させたい場合、たとえば誰かがログアウトした場合はどうでしょうか?
ジャッキー

1
@Jackieガードを再実行できるかもしれないと思っていました...リダイレクトが組み込まれている場合は、それでうまくいくかもしれません。
OldTimeGuitarGuy 2017

11
@YakovFain申し訳ありませんが、これは誤りです。これは、ルートの動作に2つの真のソースがあることを意味します。1つはガード中に発生し、もう1つはコンポーネントで発生します。ロジックが重複する可能性があるだけでなく、より自然なデータフローに逆行しています。1。APIに変更を加えます。2。ルートを更新して、APIからデータの新しい状態をフェッチし、APIを真の情報源にします。データの自然な流れが再び発生するように、ユーザーが手動でルートを再トリガーできるようにしない理由はありません。
AgmLauncher

4
これは良い答えではないと思います。ルーターは、データの真のソースでなければなりません。別のサービスを介して再ロードする必要がある場合、ルーターは最新バージョンを認識できなくなり、コンポーネントは真のソースとしてルーターに依存できなくなります。
Dan King

124

これは、Angular 5.1でonSameUrlNavigationルーター構成のプロパティを使用して行うことができます。

ここに方法を解説したブログを追加しましたが、要点は以下の通りです

https://medium.com/engineering-on-the-incline/reloading-current-route-on-click-angular-5-1a1bfc740ab2

router config enable onSameUrlNavigationオプションで、それをに設定し'reload'ます。これにより、すでにアクティブなルートに移動しようとすると、ルーターがイベントサイクルを起動します。

@ngModule({
 imports: [RouterModule.forRoot(routes, {onSameUrlNavigation: 'reload'})],
 exports: [RouterModule],
 })

ルート定義で、 runGuardsAndResolversalwaysます。これにより、ガードとリゾルバーのサイクルを常に開始し、関連するイベントを発生させるようにルーターに指示します。

export const routes: Routes = [
 {
   path: 'invites',
   component: InviteComponent,
   children: [
     {
       path: '',
       loadChildren: './pages/invites/invites.module#InvitesModule',
     },
   ],
   canActivate: [AuthenticationGuard],
   runGuardsAndResolvers: 'always',
 }
]

最後に、リロードを有効にする各コンポーネントで、イベントを処理する必要があります。これを行うには、ルーターをインポートし、イベントにバインドし、コンポーネントの状態をリセットして必要に応じてデータを再フェッチする初期化メソッドを呼び出します。

export class InviteComponent implements OnInit, OnDestroy {
 navigationSubscription;     

 constructor(
   // … your declarations here
   private router: Router,
 ) {
   // subscribe to the router events. Store the subscription so we can
   // unsubscribe later.
   this.navigationSubscription = this.router.events.subscribe((e: any) => {
     // If it is a NavigationEnd event re-initalise the component
     if (e instanceof NavigationEnd) {
       this.initialiseInvites();
     }
   });
 }

 initialiseInvites() {
   // Set default values and re-fetch any data you need.
 }

 ngOnDestroy() {
   if (this.navigationSubscription) {
     this.navigationSubscription.unsubscribe();
   }
 }
}

これらのすべての手順を実行したら、ルートの再読み込みを有効にする必要があります。


init関数を呼び出す代わりにコンポーネントをリロードする方法はありますか
Ebraheem Alrabeea

私はそうは思いません...あなたがルートから離れて戻ってナビゲートしない限り... init関数は世界の終わりではありません。コンポーネントのリロードと同じ効果を持つように初期化を制御できます。せずにフルリロードを実行する特別な理由はありますinitか?
Simon McClive、2018

私は私の問題の解決策を見つけました、あなたの応答とそれが役に立ったブログをありがとう。
Ebraheem Alrabeea

ウィンドウのリロード以外のAngular 4でそれを行う方法。
Vishakha

私のAngular5アプリに最適です!ngOnDestroy()のサブスクライブ解除は少し重要です-そうしないと面白いです:-)
BobC

107

予想されるルートにリダイレクトする関数をコントローラーに作成します

redirectTo(uri:string){
   this.router.navigateByUrl('/', {skipLocationChange: true}).then(()=>
   this.router.navigate([uri]));
}

次に、このように使用します

this.redirectTo('//place your uri here');

この関数は、ダミーのルートにリダイレクトし、ユーザーが気付かないうちにすばやく目的のルートに戻ります。


3
ありがとう!ここでの最善の解決策。
アランスミス

このソリューションは問題なく機能し、より良いソリューションが得られるまでこれを使用できます。@theoに感謝します。
Sibeesh Venu

12
'/'代わりに使用すると魅力的に機能します'/DummyComponent'
suhailvs

1
Angular 7で問題なく動作し、ブラウザーの履歴に問題はありません。特定のコンポーネントをターゲットにしているため、このソリューションを使用することにしました。同じページをリロードすることは一般的には異常なケースであるため、アプリケーション全体を特定のパラダイムに従うようにするのはやり過ぎのように思えます。これは小さく、他のソリューションよりも実装が簡単です。
JEカーターII

1
OKですが、HomeComponent(またはルート "/"にあるもの)をリロードし、ngOnInit / ngOnDestroyのライフサイクル全体を無料で実行します。ダミーの軽量コンポーネントを使用した特定のルートを使用することをお勧めします。そうしないと、ラグに気付くでしょう
ペトロニウス

77

編集

Angularの新しいバージョン(5.1以降)の場合は、@ Simon McCliveによって提案された回答を使用してください

古い答え

AngularのGitHub機能リクエストでこの回避策を見つけました:

this._router.routeReuseStrategy.shouldReuseRoute = function(){
    return false;
};

this._router.events.subscribe((evt) => {
    if (evt instanceof NavigationEnd) {
        this._router.navigated = false;
        window.scrollTo(0, 0);
    }
});

これをapp.component.ts ngOnInit関数に追加してましたが、確実に機能しました。同じリンクをさらにクリックすると、componentおよびデータがます。

元のGitHub機能リクエストへのリンク

クレジットはmihaicux2に送られます GitHubのれます。

私はこれをバージョン4.0.0-rc.3でテストしましたimport { Router, NavigationEnd } from '@angular/router';


1
Angular 4.4.xでこれを試したところ、これは完全に機能します。ありがとう!
Mindsectチーム'21

1
アプリで各親ルートの子ルートをナビゲートするためのMaterialのnav-tab-barを実装するまで、これは私にとってはうまくいきました。ユーザーがこのコードを実行するページにアクセスすると、アニメーションインクバーが消えます。(なぜですか?説明するのに十分な時間やスペースがありません...)
andreisrob

3
これは非常に悪い考えです— ActivatedRouteは常に同じになります。
artuska

1
@AnandTyagi Angular 5.1以降を使用している場合は、SimonMcClivesソリューションを試してください。多分それはあなたのためによりよく働きます。
Arg0n 2018

2
非常に悪い考え... routeReuseStrategy.shouldReuseRoute = falseを適用すると、コンポーネント階層のすべてのコンポーネントがロードされます。つまり、すべての親子コンポーネントがURLの変更時にリロードを開始することを意味します。したがって、このフレームワークを使用する意味はありません。
PSabuwala

27

少しトリッキー:いくつかのダミーパラメーターで同じパスを使用します。例えば-

refresh(){
  this.router.navigate(["/same/route/path?refresh=1"]);
}

12
今:this.router.navigate(['/pocetna'], { queryParams: { 'refresh': 1 } });route.queryParams.subscribe(val => myRefreshMethod())どこroute: ActivatedRouteリフレッシュコンポーネントに注入された...希望、それが助け
insan-E

4
現在Angular 7では、これはもう機能しないようです。誰かが確認できますか、それとも私は何か間違っていますか?(私はinsan-eのわずかなバリエーションも試しました。)
pbarranis

2
少し醜いかもしれません。
ダッブ。

18

私はこれをAngular 9プロジェクトに使用しています:

reloadCurrentRoute() {
    let currentUrl = this.router.url;
    this.router.navigateByUrl('/', {skipLocationChange: true}).then(() => {
        this.router.navigate([currentUrl]);
    });
}

PS:テスト済みで、「Angular 7、8」でも動作します


私はこの解決策を使って自分の経験を活かそうと思った。私にとっては、ルートに関連付けられたコンポーネント全体をリロードするようです。私の状況では、さまざまなルーティングパラメータを持つ通常のrouter.navigateはコンポーネントをロードしたままにし、ngOnInitからの新しい変更(ルートパラメータに基づく)をロードするだけです。あなたのソリューションはこれをしていないようです、それは実際にコンポーネント全体をリロードし、それからそれをルートパラメータに基づいてngOnInitで変更するようです。とにかく、それは私の状況ではマイナーな不便であり、あなたの解決策は私のニーズに応えます。
エヴァンセビー

17

Angular 2-4ルートリロードハック

私にとって、ルートコンポーネント(任意のルートに存在するコンポーネント)内でこのメソッドを使用すると機能します。

onRefresh() {
  this.router.routeReuseStrategy.shouldReuseRoute = function(){return false;};

  let currentUrl = this.router.url + '?';

  this.router.navigateByUrl(currentUrl)
    .then(() => {
      this.router.navigated = false;
      this.router.navigate([this.router.url]);
    });
  }

このアプローチには注意が必要です。これはルーターの動作にグローバルに影響します(子ルート間を移動すると、親ルートは常にリロードされます)。
seidme

16

これは魅力のように私のために働きます

this.router.navigateByUrl('/', {skipLocationChange: true}).then(()=>
this.router.navigate([<route>]));

3
これが最も簡単な答えです。できれば、これを承認済みの回答としてマークします。受け入れられた回答とは逆に、ページで使用されているすべての単一のコンポーネントを再ロードする必要があり、異なるルートにある可能性がある各コンポーネントを個別に再ロードする必要がある状況でも、サービスを介してもやりすぎです。
Andrew Junior Howard

8

パラメータの変更時にページの再読み込みは行われません。これは本当に良い機能です。ページをリロードする必要はありませんが、コンポーネントの値を変更する必要があります。paramChangeメソッドは、URLの変更を呼び出します。コンポーネントデータを更新できます

/product/: id / details

import { ActivatedRoute, Params, Router } from ‘@angular/router’;

export class ProductDetailsComponent implements OnInit {

constructor(private route: ActivatedRoute, private router: Router) {
    this.route.params.subscribe(params => {
        this.paramsChange(params.id);
    });
}

// Call this method on page change

ngOnInit() {

}

// Call this method on change of the param
paramsChange(id) {

}

7

これがAngular 9でやったことです。これが古いバージョンで機能するかどうかはわかりません。

リロードする必要がある場合は、これを呼び出す必要があります。

 this.router.navigate([], {
    skipLocationChange: true,
    queryParamsHandling: 'merge' //== if you need to keep queryParams
  })

ルーターforRootでは、SameUrlNavigationを 'reload'に設定する必要があります

 RouterModule.forRoot(appRoutes, {
  // ..
  onSameUrlNavigation: 'reload',
  // ..
})

そして、すべてのルートでrunGuardsAndResolversを「always」に設定する必要があります

{
    path: '',
    data: {},
    runGuardsAndResolvers: 'always'
},

1
これが正解です。「onSameUrlNavigation」はAngular 5以降で機能します。投票して上に移動してください
Yaroslav Yakovlev

これは私にはうまくいきませんでした。アンドリスの下はそうしました。アンドリスのリロードは、実際の通常のルートナビゲーションほどクリーンではありませんが。ページ全体を再読み込みするようには見えませんが、ルートに関連付けられたコンポーネント全体を再読み込みするようです。ルートに関連付けられたコンポーネント全体ではなく、ルートパラメータに基づいてリロードするための子コンポーネントが必要でした。とにかく、それは十分に機能します。ちょうど私の経験にチャイムを入れると思った。
エヴァンセビー

4

私にとってハードコーディングは

this.router.routeReuseStrategy.shouldReuseRoute = function() {
    return false;
    // or
    return true;
};

1
推奨されません。人々は、このSO全体を通じてさまざまな方法でこのソリューションを再投稿し続けています。はい、それはあなたの当面の問題を修正するかもしれませんが、あなたがこれを実装したことを後で忘れるでしょう、そしてあなたはあなたのアプリが奇妙な振る舞いを経験している理由を見つけるために何時間も費やすでしょう。
Helzgate

これを使用する必要がある場合は、Ebraheem Alrabeeのソリューションを使用して、単一のルートにのみ適用してください。
Helzgate

4

私の知る限り、Angular 2のルーターではこれを行うことはできません。

window.location.href = window.location.href

ビューを再読み込みします。


3
これにより、現在のルートだけでなくアプリケーション全体が更新されます。
rostamiani

@HelloWorld-ロジックを角度7に配置する場所
Pra_A

どの角度バージョンでもかまいません。これは通常のjsコードです
HelloWorld

これをクリック機能に置きます。window.location.href = '/'または '/ login'これはapp-routing.module.ts内で定義されます。私の場合、ユーザーがログアウトすると、ログイン画面に戻るはずなので、ログアウト時にすべての認証データを消去し、成功したらwindow.location.href = '/'を使用します。これは、loaginページをリロードして、すべてのJavaScriptを再度実行することを意味します。通常のルート変更では、機能の再実行が不要な場合はこれをお勧めしません。
Ali Exalter

これによりNgRxストアが完全にリセットされる可能性があるため、すでに取得したデータは失われます。
John Q

3

アンギュラーの内部の仕組みをいじくる必要のない、すばやく簡単なソリューションを見つけました。

基本的に:同じ宛先モジュールで代替ルートを作成し、それらを切り替えるだけです。

const routes: Routes = [
  {
    path: 'gesuch',
    loadChildren: './sections/gesuch/gesuch.module#GesuchModule'
  },
  {
    path: 'gesuch-neu',
    loadChildren: './sections/gesuch/gesuch.module#GesuchModule'
  }
];

そしてここにトグゲルメニュー:

<ul class="navigation">
    <li routerLink="/gesuch-neu" *ngIf="'gesuch' === getSection()">Gesuch</li>
    <li routerLink="/gesuch" *ngIf="'gesuch' !== getSection()">Gesuch</li>
</ul>

それが役に立てば幸い :)


代替ルートにパラメータがあり、パラメータが変更されたときに再ロードする場合はどうなりますか?
ムクス、

3

ちょっとハードコアだけど

this.router.onSameUrlNavigation = 'reload';
this.router.navigateByUrl(this.router.url).then(() => {

    this.router.onSameUrlNavigation = 'ignore';

});

2

私の場合:

const navigationExtras: NavigationExtras = {
    queryParams: { 'param': val }
};

this.router.navigate([], navigationExtras);

正しい仕事


2

OnInitを実装し、route.navigate()のメソッドでngOnInit()を呼び出します

例を見る:

export class Component implements OnInit {

  constructor() {   }

  refresh() {
    this.router.navigate(['same-route-here']);
    this.ngOnInit();   }

  ngOnInit () {

  }

2

ダミーコンポーネントとルートを使用して同様のシナリオを解決reloadしましたredirect。これは間違いなくすべてのユーザーシナリオを網羅しているわけではありませんが、私のシナリオではうまくいきました。

import { Component, OnInit } from '@angular/core';
import { Router, ActivatedRoute } from '@angular/router';
import { Http } from '@angular/http';

@Component({
  selector: 'reload',
  template: `
    <h1>Reloading...</h1>
  `,
})
export class ReloadComponent implements OnInit{
  constructor(private router: Router, private route: ActivatedRoute) {
  }

  ngOnInit() {
    const url = this.route.snapshot.pathFromRoot.pop().url.map(u => u.path).join('/');
    this.router.navigateByUrl(url);
  }
}

ルーティングは、ワイルドカードを使用してすべてのURLをキャッチするように配線されています。

import { RouterModule } from '@angular/router';
import { NgModule } from '@angular/core';
import { LoginViewComponent } from './views/login/login.component';
import { HomeViewComponent } from './views/home/home.component';
import { ReloadComponent } from './views/reload/reload.component';

@NgModule({
  declarations: [ 
    LoginViewComponent, HomeViewComponent, ReloadComponent
  ],
  imports: [
    RouterModule.forRoot([
      { path: 'login', component: LoginViewComponent },
      { path: 'home', component: HomeViewComponent },
      { 
        path: 'reload',
        children: [{
          path: '**',
          component: ReloadComponent 
        }]
      },
      { path: '**', redirectTo: 'login'}
    ])
  ],
  exports: [
    RouterModule,
  ],
  providers: [],

})
export class AppRoutingModule {}

これを使用するには、目的のURLにreloadを追加するだけです。

  this.router.navigateByUrl('reload/some/route/again/fresh', {skipLocationChange: true})

2

現在のルートを更新する方法はいくつかあります

ルーターの動作を変更する(Angular 5.1以降) ルーターのonSameUrlNavigationを「再読み込み」に設定します。これにより、同じURLナビゲーションでルーターイベントが発行されます。

  • その後、ルートにサブスクライブしてそれらを処理できます
  • runGuardsAndResolversと組み合わせて使用​​すると、リゾルバーを再実行できます

ルーターはそのままにしておきます

  • URLに現在のタイムスタンプを含む更新queryParamを渡し、ルーティングされたコンポーネントのqueryParamsをサブスクライブします。
  • router-outletのactivateイベントを使用して、ルーティングされたコンポーネントを保持します。

https://medium.com/@kevinkreuzer/refresh-current-route-in-angular-512a19d58f6eに詳細な説明を書きました

お役に立てれば。


1

更新するコンポーネントのルートがであるとするとview、これを使用します。

this.router.routeReuseStrategy.shouldReuseRoute = function (future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot) {
  if (future.url.toString() === 'view' && curr.url.toString() === future.url.toString()) {
    return false;
  }
  return (future.routeConfig === curr.routeConfig);
}; 

debuggerメソッド内に追加して、に移動した後の正確なルートを知ることができます"departments/:id/employees"


1

解決策は、ダミーパラメータ(つまり、秒単位の時間)を渡すことです。このようにして、リンクは常にリロードされます。

this.router.navigate(["/url", {myRealData: RealData, dummyData: (new Date).getTime()}])

1

私は使用setTimeoutしていますnavigationByUrlこの問題て解決しています...そして、私にとっては問題なく動作しています。

他のURLにリダイレクトされ、代わりに現在のURLに再度アクセスします...

 setTimeout(() => {
     this.router.navigateByUrl('/dashboard', {skipLocationChange: false}).then(() =>
           this.router.navigate([route]));
     }, 500)

1

これはAngular 6+で(ネイティブに)解決されたと思います。小切手

しかし、これはルート全体で機能します(すべての子ルートも含まれます)

単一のコンポーネントをターゲットにする場合は、次のようにします。変化するクエリパラメータを使用して、必要なだけナビゲートできるようにします。

ナビゲーションのポイント(クラス)

   this.router.navigate(['/route'], {
        queryParams: { 'refresh': Date.now() }
    });

「更新/再読み込み」するコンポーネント内

// . . . Component Class Body

  $_route$: Subscription;
  constructor (private _route: ActivatedRoute) {}

  ngOnInit() {
    this.$_route$ = this._route.queryParams.subscribe(params => {
      if (params['refresh']) {
         // Do Something
         // Could be calling this.ngOnInit() PS: I Strongly advise against this
      }

    });
  }

  ngOnDestroy() {
    // Always unsubscribe to prevent memory leak and unexpected behavior
    this.$_route$.unsubscribe();
  }

// . . . End of Component Class Body

1

Angularにはまだこれに対する良い解決策が含まれいないようで非常にイライラします。ここでgithubの問題を提起しました:https : //github.com/angular/angular/issues/31843

それまでの間、これは私の回避策です。上記で提案された他のソリューションのいくつかを基にしていますが、もう少し堅牢だと思います。ルーターサービスを " ReloadRouter" でラップする必要があります。これにより、リロード機能が処理さRELOAD_PLACEHOLDERれ、コアルーター構成にが追加されます。これは暫定的なナビゲーションに使用され、他のルート(またはガード)のトリガーを回避します。

注:リロード機能ReloadRouter必要な場合にのみ、を使用してくださいRouterそれ以外の場合は、通常を使用してください。

import { Injectable } from '@angular/core';
import { NavigationExtras, Router } from '@angular/router';

@Injectable({
  providedIn: 'root'
})
export class ReloadRouter {
  constructor(public readonly router: Router) {
    router.config.unshift({ path: 'RELOAD_PLACEHOLDER' });
  }

  public navigate(commands: any[], extras?: NavigationExtras): Promise<boolean> {
    return this.router
      .navigateByUrl('/RELOAD_PLACEHOLDER', {skipLocationChange: true})
      .then(() => this.router.navigate(commands, extras));
  }
}

1

インポートRouterActivatedRouteから@angular/router

import { ActivatedRoute, Router } from '@angular/router';

挿入RouterしてActivatedRoute(URLから何かが必要な場合)

constructor(
    private router: Router,
    private route: ActivatedRoute,
) {}

必要に応じて、URLからパラメーターを取得します。

const appointmentId = this.route.snapshot.paramMap.get('appointmentIdentifier');

ダミーまたはメインのURLに移動してから実際のURLに移動するトリックを使用すると、コンポーネントが更新されます。

this.router.navigateByUrl('/appointments', { skipLocationChange: true }).then(() => {
    this.router.navigate([`appointment/${appointmentId}`])
});

あなたの場合

const id= this.route.snapshot.paramMap.get('id');
this.router.navigateByUrl('/departments', { skipLocationChange: true }).then(() => {
    this.router.navigate([`departments/${id}/employees`]);
});

ダミールートを使用している場合、見つからないURLを実装すると、どのURLにも一致しない場合、タイトルが「見つかりません」と点滅します。


0

ルートパラメータの変更をサブスクライブする

    // parent param listener ie: "/:id"
    this.route.params.subscribe(params => {
        // do something on parent param change
        let parent_id = params['id']; // set slug
    });

    // child param listener ie: "/:id/:id"
    this.route.firstChild.params.subscribe(params => {
        // do something on child param change
        let child_id = params['id'];
    });

0

ルーターリンク経由でルートを変更する場合は、次の手順に従います。

  constructor(public routerNavigate: Router){

         this.router.routeReuseStrategy.shouldReuseRoute = function () {
            return false;
          };

          this.router.events.subscribe((evt) => {

            if (evt instanceof NavigationEnd) {

                this.router.navigated = false;
             }
          })
      }

0

RouterModuleの "onSameUrlNavigation"プロパティを使用して、Routeイベントにサブスクライブする必要があります https://blog.angularindepth.com/refresh-current-route-in-angular-512a19d58f6e


ソリューションへのリンクを歓迎しますが、それがなくても回答が役立つことを確認してください。リンクの周囲にコンテキストを追加して、他のユーザーがそれが何であるか、なぜそこにあるのかを理解し、ページの最も関連性の高い部分を引用してくださいターゲットページが利用できない場合にリンクし直します。リンクに過ぎない回答は削除される場合があります。
アレッシオ

0

ルートを保存するタイミングを決定し、falseを返します

this.router.routeReuseStrategy.shouldReuseRoute = function () {
    return false;
};

そして、ルーターのナビゲートされた値をfalseに設定します。これは、このルートがルーティングされなかったことを示します

this.mySubscription = this.router.events.subscribe(event => {
    if (event instanceof NavigationEnd) {
        this.router.navigated = false;
    }
});

0

私はいくつかの修正を試みましたが、どれも機能しません。私のバージョンは単純です:新しい未使用のパラメーターをクエリパラメーターに追加します

            if (force) {
                let key = 'time';

                while (key in filter) {
                    key = '_' + key;
                }

                filter[key] = Date.now();
            }

            this.router.navigate(['.', { filter: JSON.stringify(filter) }]);

0

window.location.replace

//ルートを囲むためにバックティックを使用

window.location.replace(departments/${this.id}/employees

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.