通過した後 Ionic Framework を使用してログイン/ログアウト時に履歴をクリアしてページをリロードする
同じ質問を知りたいのですが、TypeScriptを使用したionic2についてです。
ログインおよびログアウト時に、構成でライブラリを実行するクラスがあるため、app.ts
をリロードする必要があります。
基本的にはホームにリダイレクトしてリロードします。
イオン1
私はIonic 2を使用していませんが、現在はIonic 1.2を使用しており、まだui-routerを使用している場合は、reloadを使用できます:ui-でtrue sref
または、以下のコードをログアウトコントローラーに追加できます
$state.transitionTo($state.current, $stateParams, {
reload: true,
inherit: false,
notify: true
});
Angular 2
使用する
$ window.location.reload();
または
location.reload();
この答えが見つかりました ここ 、(特に行this.navCtrl.setRoot(this.navCtrl.getActive().component);
に注意してください。これは、現在のページをリロードするために出くわした最も簡単なソリューションですIonic 2&3以降のバージョンのAngular(mine is 4)なので、それに応じてクレジットを支払う必要があります。
現在のページを再読み込み
_import { Component } from '@angular/core';
import { NavController, ModalController} from 'ionic-angular';
@Component({
selector: 'page-example',
templateUrl: 'example.html'
})
export class ExamplePage {
public someVar: any;
constructor(public navCtrl: NavController, private modalCtrl: ModalController) {
}
refreshPage() {
this.navCtrl.setRoot(this.navCtrl.getActive().component);
}
}
_
別のページを再読み込みしたい場合は、以下を使用してください(this.navCtrl.setRoot(HomePage);
に注意してください:
_import { Component } from '@angular/core';
import { NavController, ModalController} from 'ionic-angular';
import { HomePage } from'../home/home';
@Component({
selector: 'page-example',
templateUrl: 'example.html'
})
export class ExamplePage {
public someVar: any;
constructor(public navCtrl: NavController, private modalCtrl: ModalController) {
}
directToNewPage() {
this.navCtrl.setRoot(HomePage);
}
}
_
ionic 2の場合、ViewControllerでfireWillEnter
をトリガーしてページのリロードを強制すると機能します
viewController.fireWillEnter();
これが私にとってうまくいったことです現在のページのみを更新します-
ビューページからonDeleteを呼び出すときに、refreshMe関数を呼び出そうとしています。
page.tsファイルの外観を確認してください-
export class MyPage {
lines of code goes here like
public arr1: any;
public arr2: any;
public constructor(private nav: NavController, navParams: NavParams) {
this.nav = nav;
this.arr1 = [];
this.arr2 = [];
// console.log("hey array");
}
onDelete() {
perform this set of tasks...
...
...
refreshMe()
}
refreshMe() {
this.nav.setRoot(MyPage);
}
}
これは現在のページのみを更新するだけです。
必要に応じて、ビューからこの関数を呼び出すこともできます-
<ion-col width-60 offset-30 (click)="refreshMe()">
....
....
</ion-col>
これはハックですが、機能します。
テンプレートの調整に続くロジックをsetTimeout
でラップし、ブラウザーに更新を実行する時間を与えます。
/* my code which adjusts the ng 2 html template in some way */
setTimeout(function() {
/* processing which follows the template change */
}, 100);
CanReuse
インターフェースを実装し、routerCanReuse
をオーバーライドしてfalse
を返す必要があります。次に、router.renavigate()
を呼び出してみてください。
コンポーネントは次のようになります。
class MyComponent implements CanReuse {
// your code here...
routerCanReuse(next: ComponentInstruction, prev: ComponentInstruction) {
return false;
}
}
そして、ログイン/ログアウトを実行するときは、次のように呼び出します。
// navigate to home
router.renavigate()
私は個人的にこれらの3行を使用して、コンポーネントを完全に更新します
let active = this.navCtrl.getActive(); // or getByIndex(int) if you know it
this.navCtrl.remove(active.index);
this.navCtrl.Push(active.component);
IonViewWillLeave()を使用して、コンポーネントのリロード中にスプラッシュスクリーンを表示し、ロードされたらionViewDidEnter()で非表示にすることができます。
それが役に立てば幸い