Ionic-framework: Ionic2 --nav.setRoot(Component)-初回のみ動作し、その後はナビゲートできず、エラーは報告されません

作成日 2016年03月18日  ·  100コメント  ·  ソース: ionic-team/ionic-framework

問題の簡単な説明:

Ionic2でアプリを開発しています。 親としてApp.ts、子ページとしてWelcome.ts、子ページとしてFeatured.tsもあります。 アプリとFirebaseを統合しています。 ルートページは最初にWelcomeに設定されます。

this.rootPage = Welcome;

ステップ1:[ようこそ]のボタンをクリックしてGoogleで認証し、onAuthが呼び出されたら、 this.nav.setRoot(Featured);を設定します。これまではすべて正常に機能します。 さまざまなページのサイドメニューを有効にする注目のページに移動し、それらすべてに問題なく移動できます。

ステップ2:Featuredは、App.ts / htmlのサイドメニューを有効にします。そこには、una​​uthを呼び出すログアウトボタンがあります。
Unauthは、Firebaseの認証を解除してから次のことを行います。

this.menu.close();    
let nav = this.app.getComponent('nav');    
nav.setRoot(Welcome); 

ステップ3:ステップ1と同じように再度ログインします。これまではすべて問題ありません。

ステップ4:サイドメニューを開き、サイドメニューから任意のページを選択します。ナビゲーションは発生しません。 サイドメニューは閉じますが、ページは同じままで、ナビゲーションバーアイコンボタンが消え、ナビゲーションは発生しません。
openPageコード:

  openPage(page) {
    //1. Loop through and set active attribute to False if it doesn't match.
    //   Set to True if it matches page title
    for(var i = 0; i < this.NavPages.length; i++) {
      if(this.NavPages[i].title == page.title) this.NavPages[i].active = true;
      else this.NavPages[i].active = false;
    }
    for(var i = 0; i < this.ActivityPages.length; i++) {
      if(this.ActivityPages[i].title == page.title) this.ActivityPages[i].active = true;
      else this.ActivityPages[i].active = false;
    }
    for(var i = 0; i < this.PreferencesPages.length; i++) {
      if(this.PreferencesPages[i].title == page.title) this.PreferencesPages[i].active = true;
      else this.PreferencesPages[i].active = false;
    }

    //2. close the menu when clicking a link from the menu
    this.menu.close();
    //3. navigate to the new page if it is not the current page
    let nav = this.app.getComponent('nav');
    nav.setRoot(page.component);
  }

どのような行動を期待していますか?

手順1と同様に、ナビゲーションが引き続き発生することを期待しています。

再現する手順:
上記に含まれる再現手順。

Code included above.

その他の情報:(スタックトレース、関連する問題、修正方法の提案、スタックオーバーフローリンク、フォーラムリンクなど)
残念ながらエラーは発生していません。 コンソールログにエラーは表示されません。

どのイオンバージョン? 2.x

terminal / cmdプロンプトからionic infoを実行します:(以下に出力を貼り付けます)

Your system information:

Cordova CLI: 6.0.0
Gulp version:  CLI version 3.9.0
Gulp local:   Local version 3.9.1
Ionic Version: 2.0.0-beta.3
Ionic CLI Version: 2.0.0-beta.19
Ionic App Lib Version: 2.0.0-beta.9
ios-deploy version: 1.8.2 
ios-sim version: 5.0.3 
OS: Mac OS X El Capitan
Node Version: v0.12.7
Xcode version: Xcode 7.2.1 Build version 7C1002 

ありがとう。

reply

最も参考になるコメント

なぜこの問題は解決されたのですか? ナビゲーションは本当に壊れているようです。 フォームが含まれているページをプッシュすると、どちらも機能しません。

全てのコメント100件

私は次のことに気づきました:2つのイオンページがdomに同時に存在します。
screen shot 2016-03-18 at 3 34 03 pm

私がナビゲートしたのは「explore」で、「featured」ページよりもz-index(92)が低くなっています。 したがって、私は探索する必要がありますが、「機能」は「探索」の上に93のz-indexでオーバーレイされます。

同じ問題が発生していますが、私の場合、ログイン後にリダイレクトすることさえできません。

すでにログインしてログインビューにアクセスしている場合、 nav.setRoot(TabsPage)は完全に実行されます。

しかし、ユーザーの確率を取得した後にFacebookでログインした場合、 nav.setRoot(TabsPage)は何もしません。 さらに、 nav.push(TabsPage)も何もしていませんが、メインがタブの1つであるnav.push(Main)を実行すると、正しく実行されていますが、タブバーがなく、明らかに戻るボタンが表示されます。

また、 nav.setRoot(Main)を実行すると正しく機能しますが、タブバーがなく、戻るボタンがあるタブに移動します。

いくつかの情報を追加します。 ドキュメントでsetRootが約束を返すことを確認したので、次のようにしました。

this.nav.setRoot(TabsPage)
  .then(data => {
      console.log(data);
  }, (error) => {
      console.log(error);
  })

これにより、ログインページにアクセスして既にログインしている場合はtrueがスローされますが、Facebookでログインすると何もスローされないため、約束は解決されないようです。

わかりました、別の更新。 setRootから呼び出される関数setPagesのcomponents / nav / nav-controller.jsにIonic2のコアに移動すると、遷移のコールバックは実行されません。
次の関数のフローに従う場合:setRoot-> setPages-> _transition-> _render-> _postRender

_render関数の場合:

this.loadPage(enteringView, null, opts, function () {
    if (enteringView.onReady) {
        // this entering view needs to wait for it to be ready
        // this is used by Tabs to wait for the first page of
        // the first selected tab to be loaded
        enteringView.onReady(function () {
            enteringView.loaded();
            _this._postRender(transId, enteringView, leavingView, isAlreadyTransitioning, opts, done);
        });
    }
    else {
        enteringView.loaded();
        _this._postRender(transId, enteringView, leavingView, isAlreadyTransitioning, opts, done);
    }
});

私のコードはenteringView.onReadyに入り、コールバックは実行されません。

enteringView.onReadyを待つ前に_postRenderメソッドを呼び出すだけで、アプリは正常に動作しますが、とても汚いです。
問題は、タブのページの準備ができるのを待っているようです。 準備ができたり、準備が整った状態になったりすることはないと思います。

これは私のコードで何かできますか? または、バグである可能性がありますか?

ありがとう!

GoogleまたはFacebookの認証で同じ問題があります

@privetrこれはbeta4で修正されたようです。 確認してもらえますか? 鉱山は現在正常に動作しています。

@jorchgあなたもチェックできますか? チャンスがあれば:)

皆さんこんにちは! これはbeta.4で修正されたようですので、この問題を解決しますが、それでもこの問題が発生する場合は、お気軽にコメントしてください。

私はまだこの問題を抱えています。 Facebookのログインが約束された後、ナビゲーションをTabsPageにプッシュまたはsetRootすることができません。

Cordova CLI: 6.1.1
Gulp version:  CLI version 1.2.1
Gulp local:   Local version 3.9.1
Ionic Framework Version: 2.0.0-beta.4
Ionic CLI Version: 2.0.0-beta.24
Ionic App Lib Version: 2.0.0-beta.14
ios-deploy version: 1.8.5
ios-sim version: 5.0.8
OS: Mac OS X El Capitan
Node Version: v5.9.1
Xcode version: Xcode 7.3 Build version 7D175

また、nav.setRoot(x)を呼び出すと、新しいページが実際に表示されないという状況も発生しています。 それでも、現在のページで入力フィールドにフォーカスを合わせると、入力フィールドが消えて正しいページが表示されます。

さらに、setRootの代わりにスタックにプッシュすると、入力フィールドにフォーカスするまでアニメーションは発生しません。

同じ問題。

編集:アプリのナビゲーションをサイドメニューに交換するだけで、すべてが正常に機能しています。 そのため、ベータ4のFYIの時点で、タブは中断されています。

@daveshirmanは、タブを使用してナビゲートしていますか? タブに関連している可能性があります。私の問題はサイドメニューに関連していました。 しかし、どちらもnavcontrollerを使用しているので、なぜそれが私にとってはうまくいくのか、あなたにとってはうまくいかないのかわかりません。

私は同じ問題を抱えていました: nav.setRoot(MyComponent)は何もしていないようでした。 --live-reloadを使用してAndroidでアプリを実行していましたが、一部のイベントが発生しないという警告がありました。

0     195445   log      deviceready has not fired after 5 seconds.
1     195457   log      Channel not fired: onDOMContentLoaded

また、デバイスがオフラインになったときに特定のページを表示するため、ブラウザーでコードをテストできませんでした。

それで、私はついにAndroidでコードを実行しようとしましたが、ライブリロードなしで、正常に動作します。

そのため、ライブリロードモードには、動作を妨げるものがあります。 依存関係としてBeta4を使用し、CLIバージョン2.0.0-beta25を使用します。

説明した問題がまだ発生しています。 私は完全に忘れてしまい、イオンの更新後に機能しなくなったので、このスレッドの最新の投稿で説明されているように、もう一度変更しました。

別の問題を開く必要がありますか?

皆さんこんにちは。 誰かがこれの修正を見つけましたか? 私は現在[email protected]を使用していますが、問題はまだ存在します!

私の問題の原因は、setRootのみが呼び出されたときに.pop()を呼び出すことであることがわかりました。

app.tsから呼び出すと確実に機能するようです。 他のページから呼び出すと失敗するようです。
さらに、3ページの深さのようにルートページを使用していない場合は、setRootメソッドの後にnav.popToRoot()を呼び出します。これは次のように機能します。

this.nav.setRoot(xxxx).then(() =>{
    this.nav.popToRoot();
    //....
});

なぜこの問題は解決されたのですか? ナビゲーションは本当に壊れているようです。 フォームが含まれているページをプッシュすると、どちらも機能しません。

モーダルウィンドウも表示されている場合にも壊れます。
2016年7月13日午前3時59分、「scorpnode」 [email protected]は次のように書いています。

なぜこの問題は解決されたのですか? ナビゲーションは本当に壊れているようです。 ページをプッシュした場合
フォームが含まれていると、どちらも機能しません。


あなたが言及されたので、あなたはこれを受け取っています。
このメールに直接返信し、GitHubで表示してください
https://github.com/driftyco/ionic/issues/5883#issuecomment -232241198、
またはスレッドをミュートします
https://github.com/notifications/unsubscribe/ANnlXmqTT5pf0i-JZNog5F32j8pB785Qks5qVFSZgaJpZM4H0Jz0

こんにちは、これは2.0.0-beta.10でもまだ発生しています。 NavController.setRootを呼び出した後、空白の画面が表示されます。 iOSデバイスでのみ発生します

機器情報:

  • モデル:iPad5,4
  • iOSバージョン:8.3

私は2.0.0-beta.10でこの問題に直面しています。 NavController.setRootで次のページに移動できません。 私のコードは次のようになります:

this.nav.setRoot(somepage).then(() =>{
     this.nav.popToRoot();
});

機器情報:

  • モデル:モトローラxプレイ
  • アンドロイドバージョン:6

CLIv2.0.0-beta.32。

まだ問題があります
this.nav.setRoot(ListPage)
スターターチュートリアルアプリのhello-ionic.tsから。

v2で楽になったFBログインを試してみたかった。

他に誰か?

[編集]
使っていた
import {Nav} from 'ionic-angular';
それ以外の
import {NavController} from 'ionic-angular ';

問題を解決しました。 それが誰かを助けることを願っています

ここで同じ問題があります!
今のところ修正はありますか?

みなさん、こんにちは。誰かがこの問題を実証するプランカーを提供できれば、それは素晴らしいことです。 Ionicをご利用いただきありがとうございます。

皆さんこんにちは! この問題に関する活動があったのでしばらく経っているようですので、私は今のところそれを閉じます。 それでもこの問題が発生する場合は、コメントしてください。 Ionicをご利用いただきありがとうございます。

答えられなくてすみません、私は休日にいました💃

私の問題はcordova -plugin-facebook4https://github.com/jeduan/cordova-plugin-facebook4に関連しているようです

プロジェクトをbeta.10に更新し、ionic-nativeからFacebookラッパーを使い始めたとき、問題は止まりました。 ラッパーが同じプラグインを使用していることを考慮すると、非常に奇妙です。

どうもありがとうございました!

問題ありません、修正されてよかったです!

ねえ@ jgw96 ! 残念ながら、これはベータ10でもまだ問題のようです。これは、以下のplnkrで確認できます。 事実上、ログインに成功するとルートを「タブ」ページに設定するログインモーダルがあります。「タブ」のページから「ログアウト」ボタンがあり、app.tsで消費されるイベントを発生させます。 app.tsで、ルートを「LoginPage」に設定しようとしましたが、何も起こらないようです。 「ログアウト」をクリックしてDOMを見ると、起動していることがわかり、タブの下にログインページがありますが、ナビゲーションが行われていないようです。 何か案は?

http://plnkr.co/edit/n6jCzspnEcjQbl9KF10F

御時間ありがとうございます!

この#7593の新しい問題を提出しました。 2.0.0-beta.10および11、場合によってはその他に適用できます。

ベータ11でも同じ問題があります。
this.nav.setRoot(xxx)が呼び出されるまで、ナビゲーションはうまく機能しているようです。 その後、ナビゲーションはランダムに機能します...新しいページをプッシュしても、何も起こらない場合があります。ビューは新しいページではなく現在のページに留まります。 ポップすると、ナビゲーションが2回ポップするように見えます。
NavControllerオブジェクトではすべてが正しいようで、すべてが正常に起動します。 しかし、DOMには混乱があるようです。これらの場合、イオンページタグのz-indexプロパティの値が間違っているため、間違ったページが上にとどまります。

ダブルページのポップとDOMの混乱に関して、 @ Troknusとまったく同じ動作が見られます。

また、最初にsetRootを実行し、次にナビゲーションを実行すると、最初のルートページが、以前は完全にアンロードされていなかったかのようにちらつきます。

@Troknusの問題もあります。show-pageクラスを手動で追加して機能させようとしていますが、適切な解決策ではありません。

私はすべてのサイトを検索しますが、何も検索しません。 私はすべての可能な解決策を試しますが、すべてがベーンにあります。

ベータ10で。ナビゲーションは完全に実行されます。 なぜベータ11ではないのですか。

@Troknusと同じ動作が見られます。

みんな、 @ jorchgが言ったのと同じ問題を抱えています..タブエラーを考慮して..2回目の呼び出し後にタブにプッシュするだけです(プッシュは発生しているようですが、現在のページはまだ上にあります)

ログイン後、タブビューにプッシュしようとしたが、wotkしない場合..タブ内にあるはずのページにプッシュした場合..動作します..これがプロジェクトです

@Troknusと同じ問題があります

@schaergeekがベータ11に更新され、機能しました。https://github.com/mariohmol/ionic2-meteor-messenger-passwordの例を次に示します。

Troknusに賛成しましたが、投稿の方が明確だと思います。

このナビゲーションは本当の問題です。
私たち(そして他の多くの人々)は、このバグで本番環境に移動することを許可されていません。
(私たちはTroknusとしてベータ11で作業しており、同じものを持っています...)。

@joshgarwoodによるplnkrを見てみました。 イベントの公開が問題のようですか? MyAppに機能を実行させるために認証イベントを公開する代わりに、TabPage内のNavControllerインスタンスを介してルートを設定すると、機能します。 MyAppのイベントリスナーを介してルートを設定しようとしても、そうではありません。 したがって、注入されているさまざまなNavControllerインスタンスの問題のように思えます...? ここでDIがどのように機能するかはわかりませんが、消費者はNavControllerのどのインスタンスが注入されるかを気にする必要はないように感じます。 setRoot(*)を呼び出すと、うまくいくはずですよね?

@Troknusが話しているZ-indexの問題に関しては、皆さんは問題#8042に興味があるかもしれません。 その場合、setRoot(*)はまったく呼び出されていません。

実際、 @ jgw96コメントを読んだところ、ランダムなNavControllerインスタンスを使用することになっていないようです...?

それでも、Zインデックスにバグがあるという事実は変わりません。

ここでbeta11と同じ問題...

DOMが混乱したり、ページがちらついたりするのを再現する別のplnkrを持っている人はいますか? @joshgarwoodによるplnkrには、プッシュまたはポップは含まれていません。

@rcjsuen Beta10とBeta11で同じ問題が発生したので、この回避策を見つけました。 setRootが意図したとおりに機能しているかどうかはわかりませんが、現時点では機能しています。

動作しない

  private initializeApp(): void {
    this.platform.ready().then(() => {

      firebase.auth().onAuthStateChanged(user => {
        if (user) {
          this.nav.setRoot(TabsPage);
        } else {
          this.nav.setRoot(LoginPage);
        }
      });

      StatusBar.styleDefault();
    });
  }
}

働く

 private initializeApp(): void {
    this.platform.ready().then(() => {

      firebase.auth().onAuthStateChanged(user => {
        if (user) {
          this.setRoot(TabsPage);
        } else {
          this.setRoot(LoginPage);
        }
      });

      StatusBar.styleDefault();
    });
  }

  private setRoot(newRootPage: any){
    this.rootPage = newRootPage;
  }
}

@Vanclief同じ問題がありますが、あなたが提案したこの解決策でさえ私にはうまくいきませんでした。
私のコードは最初からあなたのものでした-それから私はionic2 rc0とangular2.0.1にアップグレードしようとしましたが、それはfirebase(またはangularfire)ではうまく機能しなかったので、ロールバックしました:

{
    "@angular/common": "2.0.0-rc.4",
    "@angular/compiler": "2.0.0-rc.4",
    "@angular/core": "2.0.0-rc.4",
    "@angular/forms": "^0.2.0",
    "@angular/http": "2.0.0-rc.4",
    "@angular/platform-browser": "2.0.0-rc.4",
    "@angular/platform-browser-dynamic": "2.0.0-rc.4",
    "@angular/router": "^2.0.0-rc.2",
    "firebase": "^3.3.0",
    "ionic-angular": "2.0.0-beta.11",
    "ionic-native": "1.2.2"
}

node_modulesを削除しました/ npm installを実行しましたが、この問題に直面しています。

奇妙なことに、this.rootPageをコールバック関数の外部に設定すると、アプリはそのページに移動します。 例えば

        this.setRoot(TeamPage);

        firebase.initializeApp(this.firebaseConfig);
        firebase.auth().onAuthStateChanged(user => {
            if (user) {
                this.setRoot(TeamPage); // If there's a user take him to the Teams page.
            } else {
                this.setRoot(LoginPage);  // If there's no user logged in send him to the LoginPage
            }
        });

ユーザーをTeamPageに移動してから、ユーザーをLoginPageに移動します(ユーザーがログインしていない場合)

でも

        firebase.initializeApp(this.firebaseConfig);
        firebase.auth().onAuthStateChanged(user => {
            if (user) {
                this.setRoot(TeamPage); // If there's a user take him to the Teams page.
            } else {
                this.setRoot(LoginPage);  // If there's no user logged in send him to the LoginPage
            }
        });

ユーザーをどこにもナビゲートすることはありません

@ Peter-Piper

更新しませんでしたが、RC0にアップグレードすると問題が解決しました。 私のプロジェクトの1つでは、Imもfirebaseを使用していて、更新に問題がありましたが、現在はすべて機能しています。

私はAngularFireを使用していませんが、このチュートリアルではそれについて説明しています: https ://playcode.org/getting-started-with-ionic-2-rc0-firebase-3-angularfire-2/

編集:これは私が作った簡単な例です

@Vanclief

おかげで、私はすでにこのアプローチを試しました-そしてそれはうまくいきました。 しかし、ノードモジュールでハックを行う必要があり、 ionic serveを実行しているときにファイルを監視しているときに、ionic RC_0がクラッシュすることで、アップグレードを中止し、古いバージョンに固執しました。

とにかく、firbase.auth.currentUserが設定されているかどうかを確認してからrootPageを設定することで、コールバックでのルートページの設定が以前に設定されていないと機能しないという上記の問題を解決しました。

        const page = firebase.auth().currentUser ? TeamPage : LoginPage;
        this.setRoot(page);

        firebase.auth().onAuthStateChanged(user => {
            // If there's a user take him to the Teams page otherwise send him to LoginPage
            const page = user ? TeamPage : LoginPage;
            this.setRoot(page);
        });

次に、setRootメソッドでチェックを実行して、同じページに2回移動しないようにします。

これもハックであり、根本的な問題に対処していません。 残念ながら、来週、この問題の詳細な調査に入る時間がありません。

これはまだ問題です。 this.nav.push(...)の使用は正常に機能しますが、this.nav.setRoot(...)の使用は初回以降は機能しません。 これが私のイオン情報です:

Your system information:

Cordova CLI: 6.3.1
Gulp version:  CLI version 3.9.1
Gulp local:  
Ionic Framework Version: 2.0.0-rc.0
Ionic CLI Version: 2.1.0
Ionic App Lib Version: 2.1.0-beta.1
OS: Distributor ID: Ubuntu Description: Ubuntu 16.04.1 LTS 
Node Version: v4.6.0

package.jsonから

  "dependencies": {
    "@ionic/storage": "^1.0.3",
    "firebase": "^3.4.1",
    "ionic-angular": "^2.0.0-rc.0",
    "ionic-native": "^2.2.2",
    "ionicons": "^3.0.0"
  },

@ jgw96なぜこれが閉じられたのですか? setRootが正しく機能していないため、これは明らかにオープンケースです。

@daveshirman 、私は同じ問題に直面していました、それはナビゲーションの問題ではありませんが、これが私がそれを解決した方法です。

私のapp.tsにはこれがあります

firebase.initializeApp(config);

platform.ready().then(() => {
  firebase.auth().onAuthStateChanged((user) => {
    if (user) {
      // If there's a user take him to the TabsPage page.
      this.rootPage = TabsPage;
    } else {
      // If there's no user logged in send him to the LoginPage
      this.rootPage = LoginPage;
    }
  });
  // Okay, so the platform is ready and our plugins are available.
  // Here you can do any higher level native things you might need.
  StatusBar.styleDefault();
});

上記のifステートメントは//ユーザーがいる場合はルートページをTabsPageページに設定します。
それ以外の場合はLoginPageに残る必要があります。通常のFirebaseログイン方法を使用すると、if部分が実行されます(つまり、rootPageに移動しますが、Facebookを使用すると、else部分が実行されます(つまり、 LoginPage

このように解決しました。
フェイスブックログイン() {

// Facebookにサインインします
Facebook.login(['email'])。then((result => {
//クレデンシャルを設定します。これを使用してFirebaseにログインします
クレデンシャル= firebase.auth.FacebookAuthProvider 'クレデンシャル'
// firebaseにログインします。これにより、ナビゲーションが機能しなくなり、// app.tsのステートメントのELSEパスが実行されます。
firebase.auth()。signInWithCredential(credentials);を返します。
}))。then((user)=> {
//alert(firebase.auth().currentUser.uid);
this.userProfileRef.child(firebase.auth()。currentUser.uid).set({
id:firebase.auth()。currentUser.uid、
メール:user.email、
displayName:user.displayName、
profilePictureURL:user.photoURL
});

   this.navCtrl.setRoot(TabsPage);
}).catch((error)=>{
  alert(error);
})

}

上記のコードで起こったことは、
最初にあなたは私が使ったFacebookにログインする必要があります
Facebook.login(['email'])。then((result =>

次に、Facebookのログイン結果から送信されたaccessTokenを使用してFirebaseにログインするのに役立つ資格情報を設定する必要があります。これは、私がここで行ったことです。
クレデンシャル= firebase.auth.FacebookAuthProvider 'クレデンシャル' ;
3番目に、設定したクレデンシャルを使用してFirebaseにログインする必要があります。これは、私がここで行ったことです。
firebase.auth()。signInWithCredential(credentials);を返します。
注:これが、this.navCtrl.setRoot(TabsPage);の正確な理由です。 動作しませんでした(ユーザーがまだFirebaseにログインしていないため)。

これで、コードのthen()パスにあるrootPathに移動できます。

FacebookのappIdとappSecreteがfirebase> authentication> facebookパネルで構成されていることを確認してください。

この助けを願って

@OyebisiJemilあなたがしたことの長い説明をありがとう。 しかし、私は、Facebookなどを使用した場合ではなく、setRootが正しく機能しないという点で、概念的に同じ問題を抱えていたことを意味しました。 でもありがとう。 同じ説明で別のオープンがない限り、この問題はクローズされるべきではありません。

どうやらあります:

https://github.com/driftyco/ionic/issues/8453

私も非常によく似た状況でこの問題にぶつかっています。 私の場合、setRoot(view)ではなくpush(view)に切り替えると問題が解決し、アプリのフローにうまく対応できません。

同じ問題があります。 nav.push(view)は正常に機能しますが、nav.setRootは機能しません。 誰か提案がありますか?

最新のビルドでは、今日と同じ問題にまだ直面しています。

ログアウト() {
this.authData.logoutUser()。then(()=> {
this.nav.setRoot(LoginPage);
});
}

動作しません。 Plzヘルプ。 Thnx。 Lis

setRoot ..のプッシュインセットを使用します。

@ jgw96 、@ adamdbradleyこれはまだ大きな問題です。 再度開いてマイルストーンを割り当ててください。 私を含め、多くの人がこの問題を抱えています。これはアプリにとって不可欠な機能です。

@dejancenceljは、この問題の解決策ではありません。

@lisaicelandこの問題を回避するために、私はこの提案に従いました:
https://forum.ionicframework.com/t/cant-access-rootnav-after-upgrade-to-beta-11/59889/15?u=niallr

@ niallr12 @daveshirmanこれはまだRC3の問題ですか?

@manucorporatこれがRC3の問題であるかどうかはわかりませんが、変更ログに修正が表示されません。 私は自分の修正に満足しており、とにかく全体的に優れたアプローチだと感じています。

必要に応じて、RC3でテストできます。

@ niallr12ええと、私はこの特定の問題を再現することができませんでした。 しかし、私は何週間もかけてNavControllerを強化し、たくさんの小さな修正とテストを行いました。 このように:クレイジーな流れでナビゲーションスタックにストレスを与える最悪のケース

このバグをRC3に対してテストできれば非常に役立ちます。

@ manucorporatrc3で問題を再現できます。 私の特定のケースでは、ルートを設定しているときに現在のビューを閉じていないようです。 現在のビューを閉じてからルートを設定すると、正常に機能します。 ビューを押すと完全に正常に機能します。

おい、

以前のメッセージをすべて読んだわけではないので、私の答えが誰かに役立つかどうかはわかりませんが、プロジェクトでそのような問題に遭遇したとき、親のナビゲーションスタックを参照して解決しました。そのため、に戻ることができました。ウェルカムページ例:

ウェルカムページ(ルートページ)

gotoFeature(): void {
  this.navCtrl.push(feature);
}

機能ページ(タブ付き

logout(): void {
  this.navCtrl.parent.parent.pop() //  back to welcome
}

タブには独自のナビゲーションスタックがあるため、このように処理する必要があります。つまり、タブナビゲーションオブジェクトレベルでsetRootを使用すると、別のページにリダイレクトされますが、フッターのタブブロックは引き続き表示されます。

なぜこの問題は解決されたのですか? 私も同じ問題を抱えています。 サンプルプロバイダーでsetRoot関数を使用しています。 アプリsetRootと変更されたページですが、終了するとナビゲーション(メニュー)が無効になります。

それはプロバイダーの私のコードです

private _leaveGroup(user: modelUser, room: modelRoom): Promise<any> {
    return new Promise((resolve, reject) => {
      let loading = this.loadingCtrl.create({dismissOnPageChange: false});
      loading.present();

      this.ref.child(room.id).child('users').child(user.id).remove()
        .then(() => this.navCtrl.setRoot(PageDashboard))
        .then(() => loading.dismiss())
        .then(() => resolve())
        .catch(err => loading.dismiss().then(() => reject(err)));
    });
}

それは私の情報です

Cordova CLI:6.3.1
Ionic Frameworkバージョン:2.0.0-rc.3
Ionic CLIバージョン:2.1.4
Ionic App Libバージョン:2.1.2
Ionicアプリスクリプトバージョン:0.0.45
ios-deployバージョン:1.9.0
ios-simバージョン:5.0.9
OS:Mac OS X Sierra
ノードバージョン:v6.9.1
Xcodeバージョン:Xcode8.1ビルドバージョン8B62

私も同じ問題を抱えていました。 ただし、setrrootステートメントのみが実行された場合はいつでも、すべてが完全に機能することを確認した後。 しかし、さまざまな理由で、任意の時点で、つまりレンダリング前に複数のsetrootステートメントが実行されると、Ionicは複数のページを作成しているため、私の場合はナビゲーションがハングします。

この問題は、RC4では見知らぬものに変化したようです。 例のログインページからメニュー/ダッシュボードにルートを設定するときに、ログインページがビュースタックに残り、ヘッダーに戻るボタンが表示されることを除いて、同じタイプの問題が発生し、あらゆる種類のメイハムが発生します

これを説明するためにlocation.reloadを実行する必要があります。これは、新しいユーザーの登録時にのみ発生するため、ひどいユーザーエクスペリエンスではないと思いますが、それでも...この問題が多くの理由で解決される理由がわかりません。人々はまだ問題を抱えています。

ログアウト用のイベントを作成します。

// app.component.ts
events.subscribe('logout', () => {
  localStorage.removeItem('token');
  this.rootPage = LoginPage;
 });

今すぐログアウト:

// pages/home/home.ts
  logout() {
    this.events.publish('logout');
  }

皆さんこんにちは。 誰かがこれの修正を見つけましたか? 現在Ionic2.0.0-rc.4を使用していますが、問題は解決していません。

こんにちは、

//これらのクラスをインポートします
 import {Component、ViewChild} from '@ angle / core';
 import {Platform、MenuController、Nav} from'ionic-angular ';

エクスポートクラスMyApp {
 //このプロパティを設定します
 @ViewChild(Nav)nav:Nav;

 //このメソッドを実装し、完全に機能します
 private openPage(page:any):any {
 //トークンを検証します 
 this.loggedIn = this.service.canActivate();
 if(!this.loggedIn){
 //ログに記録されません 
 this.nav.setRoot(LoginPage);
 } それ以外 {
 //ログに記録
 this.nav.setRoot(HomePage);
 }
 this.menuCtrl.close();
 }

抱擁!

私のアプリ: https ://github.com/siteslave/chiangmai-demo-app/blob/master/src/pages/main/main.ts#L96 -L100

import {
  ...
  App,
  ...
} from 'ionic-angular';

//=====================//
 logout() {
    localStorage.removeItem('token');
    let nav = this.app.getRootNav(); 
    nav.setRoot(LoginPage);
  }

誰かが少なくともこれに対する回避策を見つけましたか?

@joshuaohanaと同じ問題。

Facebookにログインする前にsetRootを実行すると、すべてが期待どおりに機能します。
Facebookの後にsetRootを実行すると、@ joshuaohanaと同じ動作になります。

ありがとう。

(この重複が見つかりました:https://github.com/driftyco/ionic/issues/6297)

ログアウト作業用のイベントを作成します。

また、別の実用的なソリューションでのナビゲーションに関する詳細な説明を以下に示します

https://webcake.co/exploring-nav-hierarchy-in-the-ionic-2-tabs-page/

以下に貼り付けたコードの最も価値のある部分。

import {App} from'ionic-angular ';
..。
コンストラクター(private _app:App){}

ログアウト() {
..。

    // Now I'll access the root NavController for the app,
    // and use that to reset the nav stack

    const root = this._app.getRootNav();
    root.popToRoot();

    // since I only have two items in the root NavController,
    // I could also have run root.pop() instead

}
..。

たぶんあなたの何人かは私と同じ間違いをしました:

「setRoot」を介したナビゲーションを使用しましたが、同時にバインディング「[root] = ..」がHTMLテンプレートで引き続き使用できることを見逃しました。 2つの情報を同期させると、問題が修正されました。 この場合、モデルバインディングを削除し、APIを介してのみルートを管理しました。

よろしく、マイケル

こんにちは、みんな、

@ ly-devソリューションは私のために働いた。 this._app.getRootNav().setRoot(EntryPage);を実行しただけで、機能します。

まず、navControllerと同じ場所のionic-angularからNavをインポートします
import { App, NavController } from 'ionic-angular';

次に、コンストラクターでそれを提供します。
constructor(public navCtrl: NavController, public appCtrl: App)

これで、rootnavにアクセスできます。
this.appCtrl.getRootNav().setRoot(YourComponent);

@AmitPoojaryその解決策は機能していません。 ユーザーが複数のタブに移動したとき。

:複数のページがある[ホーム]タブ。 ユーザーがクリックして複数のページに移動したとき。 その後、戻ることはありませんが、[アカウント]タブに切り替えてログアウトすると、更新されるまで[アカウント]タブに残ります。

ユーザーが[ホーム]タブをクリックしてそれ以上先に進まない場合、ユーザーは正しくログアウトされることがわかりました。

domの多くのタブにアクセスすることがすべてだと思います。ユーザーがホームタブの2番目のページに移動しても、 getRootNavはそれほど戻っていません。

これはまだ問題です。

はい、アプリケーションのメインのランディングページとしてタブを使用している私にとってはまだ問題です。 tabComponent内の任意のページから_navCtrl.setRoot()を呼び出すと、そのページのみがrootPageに設定されますが、下部のタブインターフェイスはそのまま残ります。 これにより、タブ内の他のページに引き続きアクセスできます。

image

これに対する正しい解決策は次のとおりです。

let _nav = this.app.getRootNav(); _nav.setRoot(LoginPage);

または1行

this.app.getRootNav().setRoot(LoginPage);

新しいアプリでも同様の問題があります。アプリケーションはデバイスへの最初のプッシュでのみ機能し、そこでソケット接続を行い、ソケット通信を実行します。 アプリを強制終了し、開発用コンピューターから切断し、アプリケーションを再実行しましたが、サーバー側で接続アクティビティが表示されませんでした。 私はuiktiomasfelizの推奨事項を実装していません。今日、それを試してみます。 しかし、ただ頭を上げてください。

はい。 私も同じことを達成しました:

this.app.getRootNav().setRoot(SetupPage);

ただし、デバイス上の画像パスを壊します...

(getRootNav)は非推奨であり、次のメジャーリリースで削除される予定です。 代わりにgetRootNavByIdを使用してください。

だから...このエラーは修正されず、以前のパッチはもう機能していません..:/

this.app.getRootNav().setRoot(LoginPage);

これは私にとっては目覚めていません...

これは少なくとも私にとってはリリース3.5.3で解決されました

welp、3.5.3は私のためにそれを修正しませんでした。

setRoot()の後で、まだこの問題のサイドバーが機能しないという問題があります。

私はこれだけを使用します:this.navCtrl.setRoot(HomePage);

私はここですべての解決策を試しましたが、それでもこの問題があります
Ionic 3.10.3

私はそのように解決しました

アプリをインポートする

import {IonicPage、NavController、Nav、App} from'ionic-angular ';

そして今使用する

const root = this.app.getRootNav();
root.popToRoot();
root.setRoot("LoginPage");

こんにちは、私はiPhone4とAndroidを搭載した他のいくつかのデバイスでhelloworldアプリをテストしています。

最後のIonicおよびCLIバージョン。

主な大きな問題はiPhoneにあり、setRootの呼び出しが機能していません。

void onGoClick(){
//この行は何もせず、エラーはスローされません。
this.navCtrl.setRoot(HomePage);

//この行は何もせず、エラーはスローされません。
this.app.getRootNav()。setRoot(HomePage);
}

これも機能しません

var root = this.appCtrl.getRootNav();
root.setRoot(ホームページ);
root.popToRoot();

よろしく。

こんにちは@alemdgたとえば、テキストやオブジェクトのように定義する場合は、ルートを呼び出す方法だと思います。

問題を回避したい場合は、テキスト( "HomePage")のように呼び出して、この変数を作成します

const root = this.app.getRootNav();

次のメソッドを呼び出します

const root = this.app.getRootNav();
root.popToRoot();
root.setRoot( "ホームページ");

このオブジェクトをインポートします

import {IonicPage、NavController、NavParams、Nav、App} from'ionic-angular ';

コンストラクタ(
公開アプリ:アプリ
){

最初はpopToRootで、2番目は新しいルートを定義します;)

void onGoClick(){
//この行は何もせず、エラーはスローされません。
this.navCtrl.setRoot( "ホームページ");

//この行は何もせず、エラーはスローされません。
root.popToRoot();
root.setRoot( "ホームページ");
}

これも機能しません

const root = this.appCtrl.getRootNav();
root.popToRoot();
root.setRoot( "ホームページ");

@spidermay回答ありがとうございますが、まだ機能していません。

インポートしました
import {IonicPage、NavController、NavParams、Nav、App} from'ionic-angular ';

実行されました
const root = this.app.getRootNav();
root.popToRoot();
root.setRoot( "ホームページ");

しかし、ボタンを2回クリックすると、機能します。

リフレッシュが欠けているようなものです。

私はこれを3.7.1で見ています。

次のコードを使用すると、機能するか、エラーメッセージが表示されます

this.menu.close();
this.nav.setRoot(HomePage).then(()=> {
this.nav.popToRoot();
})。catch(err => {
alert(err.toString());
});

こんにちは@FatehiAlqa​​dasi 、ありがとう。
エラーがスローされます。これがログです。

エラー:
C @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:7:21236
file:///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:7:21702
file:///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:7:21967
reduce @ [ネイティブコード]
O @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:7:21927
format @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:8:12952
transform @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:8:14339
Ce @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:3:23348
Ie @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:1046
Te @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:518
no @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:5140
file:///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:42:25653
updateRenderer @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:4409
Se @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:328
We @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:3041
Ge @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:2439
Se @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:336
detectChanges @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:6:5799
_viewAttachToDOM @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:17:22059
_transition @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:17:23173
file:///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:17:19213
invoke @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:9288
onInvoke @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:5:1143
invoke @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:9231
run @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:4458
file:///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:14079
invokeTask @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:9972
onInvokeTask @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:5:1047
invokeTask @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:9900
runTask @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:5153
o @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:2210
invoke @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:10986
エラー:
C @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:7:21236
file:///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:7:21702
file:///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:7:21967
reduce @ [ネイティブコード]
O @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:7:21927
format @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:8:12952
transform @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:8:14339
Ce @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:3:23348
Ie @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:1046
Te @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:518
no @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:5140
file:///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:42:25653
updateRenderer @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:4409
Se @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:328
We @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:3041
Ge @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:2439
Se @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:336
detectChanges @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:6:5799
_viewAttachToDOM @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:17:22059
_transition @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:17:23173
file:///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:17:19213
invoke @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:9288
onInvoke @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:5:1143
invoke @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:9231
run @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:4458
file:///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:14079
invokeTask @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:9972
onInvokeTask @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:5:1047
invokeTask @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:9900
runTask @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:5153
o @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:2210
invoke @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:10986
dispatchEvent @ [ネイティブコード]
handleTapPolyfill @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:18:6423
pointerEnd @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:18:5144
[ネイティブコード]
handleTouchEnd @ file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:19:19943
[ネイティブコード]

@ tonyawad88
これで問題が修正されました

logout(){
this.navCtrl.setRoot("LoginPage");
this.navCtrl.push("LoginPage");

}

2年前のバグですが、まだ誰も修正しようとはしていません... Ionic3でも同じ問題が発生しています

皆さんこんにちは、

ルートページからすべてのデータを取得することもできますが、タブの子のように開いているタブからページをナビゲートすることはできません。

それを解決するためにすべての可能性を試しましたが、操作は機能しません。

私のデータがあるタブページ。
1st

フェッチされたデータをクリックすると、データの詳細ページにリダイレクトされます。リダイレクトされましたが、タブページ内にあります。 このような...

2nd

手伝ってください、

前もって感謝します。

[email protected]の時点で、このバグに気づきました。 これはDeepLinkConfigに関連付けられているようです。これをapp.moduleから削除すると、問題なく1日中nav.setRoot()を呼び出すことができるためです。 私の仮説は、その後setRoot()を呼び出した後、ディープリンクロジックがwindow.locationの前にnavスタックが変更される状態になり、ディープリンクコードはそのwindow.locationがウィンドウ上にないページを指していることを確認するというものです。スタック(setRoot()を離れているため)、つまり、ナビゲートしようとしたページに戻ります。

とにかく、ここに私のために働く回避策があります。

await this.nav.push(page, params);
this.nav.remove(0, this.nav.length() - 1);

どうもありがとう@jknisley
私はこれで私の問題を解決しました。

detailEvent(eventItem) {
    this.app.getRootNav().push(DetailEventsPage, { itemUp: eventItem });  
  }

このコードは、新しいページと異なるレイアウト(タブページの下ではない)にもリダイレクトします。

後世のためにこれをここに残してください。 このログアウト機能は、副作用なしに機能しているようです。 @uiktiomasfelizに感謝します。

cliパッケージ:(/ usr / local / lib / node_modules)

@ionic/cli-utils  : 1.19.2
ionic (Ionic CLI) : 3.20.0

グローバルパッケージ:

cordova (Cordova CLI) : 7.1.0

ローカルパッケージ:

@ionic/app-scripts : 3.1.2
Cordova Platforms  : android 6.3.0 ios 4.5.4
Ionic Framework    : ionic-angular 3.9.2

システム:

ios-deploy : 1.9.2
Node       : v8.9.1
npm        : 5.7.1
OS         : macOS High Sierra
Xcode      : Xcode 9.3 Build version 9E145
async logOut() {
    await this.authProvider.logout();
    await this.app.getRootNav().setRoot('LoginPage');
  }

これは、新しいナビゲーションスタックを設定し、古いナビゲーションスタックを削除する方法です。 これは、イオン角度3.9.2に対して行われました。

this.navCtrl.remove(0, this.navCtrl.length() - 1);
this.navCtrl.insert(0, MainPage);
this.navCtrl.pop();

問題をありがとう! この問題は、元の問題に関連しないコメントを防ぐためにロックされています。 これが最新バージョンのIonicで引き続き問題になる場合は、新しい問題を作成し、テンプレートが完全に入力されていることを確認してください。

このページは役に立ちましたか?
0 / 5 - 0 評価