2017-07-11 48 views
0

何らかの理由で、関数が2回呼び出されてしまい、その理由がわからないようです。ngOnInitとコンストラクターが2回呼び出される

なるほど、このgithubの問題

https://github.com/angular/angular/issues/6782

しかし、それは私が複数の場所でファイルをインポートしてい示唆するように見えるでしょうを参照し、ここでこの質問

why ngOnInit called twice?

たIドン信じられない。

私が知る限り、私はIonic 3の遅延ロードを利用しています。ここで

は(私はこれがplunkerまたはcodepenで実行するために取得するための最良の方法を把握することはできませんごめんなさい)githubのレポあなたが問題を見てローカルで実行することができストリップダウン

へのリンクですhttps://github.com/Jordan4jc/ionic-init-example

概念は、それはまだEventsPageへの有効なルートだが、それがない場合には、ルートならば最初に、私はこの例ではLoginPage

にそれを確認した後、店の外にトークンをロードし、メインのアプリを持っています偽装して、トークンが有効であるとふりをして関数(と私がそれをコンストラクタに移動した場合のイベントthe console.log`を2回呼び出すと、が表示されます。これは私のサーバーに最新のデータを取得するため、私は実際にAPIを2回ヒットしたくありません。

EDIT:これは私が答えを発見したと信じてapp.component.ts

import { Component } from '@angular/core'; 
import { Platform } from 'ionic-angular'; 
import { StatusBar } from '@ionic-native/status-bar'; 
import { SplashScreen } from '@ionic-native/splash-screen'; 
import {Storage} from '@ionic/storage'; 

@Component({ 
    templateUrl: 'app.html' 
}) 
export class MyApp { 
    rootPage:any; 
    constructor(platform: Platform, statusBar: StatusBar, splashScreen: SplashScreen, storage: Storage) { 
    platform.ready().then(() => { 
     storage.ready().then(()=>{ 
     // pretend we loaded a JWT and verified it 
     this.rootPage = 'EventsPage'; 
     }); 
     splashScreen.hide(); 
    }); 
    } 
} 
+0

あなたの 'app.component.ts'コードの内容を追加してください。 – sebaferreras

+0

@sebaferreras 'app.component.ts'ファイルの内容で投稿を編集しました – Jordan

答えて

1

の内容です。

私は

why ngOnInit called twice?

一つの答えは、テンプレートのコンパイルエラーを参照して、1もせずにボタンがテンプレートに存在する場合という事実を参照し、残りの回答をスクロールするスタックオーバーフローにこの質問を見つけました明示的にtype="button"あなたのブラウザによって提出ボタンとして扱われるかもしれないし、アプリケーションがコードを何度も実行させるかもしれません。私のアプリで見つけたボタンにこの属性を追加すると、それが問題を解決したように見えます。

関連する問題