7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Angular】コンポーネントをリロードしたい

Posted at

Angularでコンポーネントのリロードをしたい

そう思ったことのある人は多いはず。

この記事では備忘録としてコンポーネントリロードをするための3つの手段をまとめます。

ngOninitの呼び出す方法

何かのボタンを押した際に画面の初期表示メソッドを呼ぶシンプルなやり方。

test.ts
this.ngOninit();

routerを使う方法

test.ts
constructor(private router: Router){
     // route reuse strategyのオーバーライド
     this.router.routeReuseStrategy.shouldReuseRoute = function(){
        return false;
     }

     this.router.events.subscribe((evt) => {
        if (evt instanceof NavigationEnd) {
           this.router.navigated = false;
           // ウィンドウトップへのスクロール
           window.scrollTo(0, 0);
        }
    });
}

ただし、routerを使っている他のところに影響がないかをチェックした方がいいです。

app.routing.tsを編集する方法

まずapp.routing.tsを編集

app.routing.ts
@ngModule({
 // reloadに設定する
 imports: [RouterModule.forRoot(routes, {onSameUrlNavigation: 'reload'})],
 exports: [RouterModule],
 })

// 中略

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

  // この行を追加 
  runGuardsAndResolvers: 'always',
 }
]

次にリロードしたいコンポーネントを編集

test.ts
 //追加
 navigationSubscription;     

 constructor(
   private router: Router
 ) {
   this.navigationSubscription = this.router.events.subscribe((e: any) => {
     // NavigationEnd eventが起こった時に初期化メソッドを呼んで、リロードっぽく見せる。
     if (e instanceof NavigationEnd) {
       this.initialiseInvites();
     }
   });
 }

 // 好きな初期化メソッド
 initialiseInvites() {
   
 }

参考文献

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?