앱이 종료되지 않도록 탐색 기록에 페이지를 추가하는 방법은 무엇입니까?

재고 omatic

아직 Ionic 4를 처음 사용합니다. 푸시 알림을받는 앱을 만들고 있습니다. 앱 내부의 탐색은 다음과 같이 작동합니다.

Home page -> Detail page 

사용자가 알림을 탭할 때마다 앱이 열리고 세부 정보 페이지로 이동합니다. 탐색은 작동하지만 탐색 기록이 비어 있으므로 사용자가 하드웨어 뒤로 버튼을 탭하면 앱이 종료됩니다. 대신 사용자를 홈 페이지로 리디렉션하고 싶습니다.

Ionic 4에서이를 어떻게 달성합니까? 페이지를 탐색 기록으로 푸시하는 방법이 있습니까? 설명서를 읽었지만 이것에 대해 아무것도 찾을 수 없습니다. 가장 가까운 것은 아마도 NavCtrl.push()Ionic 4에서 더 이상 사용할 수 없습니다.

감사합니다.

Sebaferreras

이 작업을 수행하는 더 쉬운 방법이있을 수 있지만 다음 접근 방식은 사용자가 푸시 알림 또는 딥 링크가 열린 후 표시된 페이지에서 돌아가고 싶을 때 사용자 지정 논리를 실행할 수 있기 때문에 매우 유연한 방법입니다. .

이 StackBlitz 데모를 살펴보십시오 .

StackBlitz demo

데모에서는 파일 DetailsPage의 다음 코드로 인해 앱이로드되는 즉시로 리디렉션 app-routing.module됩니다.

{
  path: "",
  redirectTo: "/details/1?fromDeepLink=true", // <-- here!
  pathMatch: "full"
}

어쨌든 중요한 부분은 DetailsPage. 여기에서 사용자가 a) 헤더의 뒤로 버튼 및 b) Android 기기의 물리적 뒤로 버튼을 사용하여 뒤로 돌아 가려고 할 때 발생하는 작업을 처리해야합니다.

코드는 매우 자명하지만 기본적으로 해당 페이지에서 fromDeepLink쿼리 문자열 매개 변수를 찾고 있습니다. 그렇다면 true앱은 헤더의 뒤로 버튼과 Android의 물리적 뒤로 버튼 모두에 대한 사용자 지정 작업을 등록합니다. 장치.

사용자 정의 조치는을 HomePage루트 페이지로 설정하지만 animationDirection매개 변수를로 설정합니다 'back'. 이렇게하면 실제로 탐색 스택에 추가하는 경우에도 사용자가 해당 페이지로 돌아가는 것처럼 보입니다.

다른 페이지에서 뒤로 버튼의 기본 동작에 영향을주지 않도록 사용자가 페이지를 떠나는 즉시이 사용자 지정 처리기가 제거된다는 점에 유의하는 것이 중요합니다.

import { Component, OnInit, ViewChild } from "@angular/core";
import { ActivatedRoute } from "@angular/router";

import { IonBackButtonDelegate, NavController,  Platform,  ViewDidEnter, ViewWillLeave } from "@ionic/angular";

import { Subscription } from "rxjs";

@Component({
  selector: "app-details",
  templateUrl: "./details.page.html",
  styleUrls: ["./details.page.scss"]
})
export class DetailsPage implements OnInit, ViewDidEnter, ViewWillLeave {
  @ViewChild(IonBackButtonDelegate, { static: false })
  public backButton: IonBackButtonDelegate;

  public itemId: number;
  public fromDeepLink: boolean = false;

  private unregisterBackButtonAction: Subscription;

  constructor(
    private platform: Platform,
    private route: ActivatedRoute, 
    private navCtrl: NavController,
  ) {}

  ngOnInit() {
    const itemIdParam = this.route.snapshot.paramMap.get("itemId");
    const fromDeepLinkParam = this.route.snapshot.queryParamMap.get('fromDeepLink');

    this.itemId = +itemIdParam;
    this.fromDeepLink = fromDeepLinkParam 
      ? fromDeepLinkParam.toLocaleLowerCase() === 'true' 
      : false;
  }

  ionViewDidEnter() {
    if(this.fromDeepLink) {
      this.initializeCustomBackButtonAction()
    }
  }

  ionViewWillLeave() {
    if(this.fromDeepLink) {
      this.removeCustomBackButtonAction();
    }
  }

  private initializeCustomBackButtonAction(): void {
    const leavingCallback = () => {
      console.log('Using custom back button action');
      this.navCtrl.navigateRoot('/home', { animationDirection: 'back' });
    };

    // Override the back button from the header
    if (this.backButton) {
      this.backButton.onClick = leavingCallback;
    }

    // Override the physical back button from Android devices
    this.unregisterBackButtonAction = this.platform.backButton.subscribeWithPriority(10, leavingCallback);
  }

  private removeCustomBackButtonAction(): void {
    this.unregisterBackButtonAction?.unsubscribe();
  }
}

ion-back-button탐색 스택에서 현재 페이지 앞에 페이지가 없으면 기본적 defaultHref으로이 표시되지 않으므로 데모에서 다음 과 같이 속성을 설정합니다 .

<ion-back-button defaultHref></ion-back-button>

구성 요소가 실제로이 뒤로 버튼이 내 사용자 정의 뒤로 버튼 동작으로 수행하는 작업을 재정의 할 것이기 때문에 비워 둡니다. 그러나 defaultHref템플릿에 추가해야합니다. 그렇지 않으면 뒤로 버튼이 표시되지 않습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Android 탐색 창이 자동으로 열리지 않도록하는 방법은 무엇입니까?

분류에서Dev

탐색기에서 .cab 및 .zip 아카이브를 폴더로 나열하지 않도록 설정하는 방법은 무엇입니까?

분류에서Dev

Nomad 작업이 종료되지 않도록하는 방법은 무엇입니까?

분류에서Dev

페이지에 표시되는 목록보기를 추가하는 방법은 무엇입니까?

분류에서Dev

Windows 범용 앱에서 페이지를 탐색하는 방법은 무엇입니까?

분류에서Dev

페이지에서 페이지로 데이터를 탐색하는 방법은 무엇입니까?

분류에서Dev

다음 페이지를 클릭 할 때 검색 결과와 페이지 매김이 사라지지 않도록하는 방법은 무엇입니까?

분류에서Dev

Capybara / Poltergeist가 js 시작 탐색이 완료 될 때까지 기다리도록하는 방법은 무엇입니까?

분류에서Dev

클릭 이벤트가 종료되기 전에 이미지를 추가하는 방법은 무엇입니까?

분류에서Dev

NativeScript BottomNavigation-> 하단 탐색 항목 탭에서 기본 페이지를 여는 방법은 무엇입니까?

분류에서Dev

웹 사이트의 탐색 모음이 항목을 수직으로 나누지 않도록하는 방법은 무엇입니까? (아래 이미지 참조)

분류에서Dev

탐색 창 / listeview에 이미지를 추가하는 방법은 무엇입니까?

분류에서Dev

반응 형 탐색 메뉴를 페이지 상단에 유지하는 방법은 무엇입니까?

분류에서Dev

페이지에서 탐색 또는 단추가 작동하지 않도록 방지

분류에서Dev

마스터 세부 정보 페이지에서 탐색 스택없이 페이지를 탐색하는 방법은 무엇입니까?

분류에서Dev

React-navigation : TabNavigator에 표시되지 않는 탐색을 추가하는 방법은 무엇입니까?

분류에서Dev

Shopify가 <title> </ title>에서 페이지 제목을 자르지 않도록하는 방법은 무엇입니까?

분류에서Dev

ZF2 탐색. 이동 경로에 페이지를 표시하지만 메뉴에서이 페이지를 숨기는 방법은 무엇입니까?

분류에서Dev

MSMessagesViewController-> UIContainerView-> UINavigationController-> UITableViewController로 탐색 모음이 사라지지 않도록하는 방법은 무엇입니까?

분류에서Dev

종료하기 전에 이벤트 루프가 비어있을 때까지 기다리도록 NodeJS를 설정하는 방법은 무엇입니까?

분류에서Dev

Geocoder 주소 목록이 null 일 때 앱이 닫히지 않도록하는 방법은 무엇입니까?

분류에서Dev

탐색 창에서 로컬 HTML 페이지를 문자열과 연결하는 방법은 무엇입니까?

분류에서Dev

Android : 탐색 창에서 설정 페이지를 구현하는 방법은 무엇입니까?

분류에서Dev

이 속성 배열이 내보기에 표시되지 않도록하는 방법은 무엇입니까?

분류에서Dev

웹 개발 : 브라우저에 페이지를 '저장'하고 탐색 할 때마다 페이지가 다시로드되지 않도록하는 방법

분류에서Dev

목록보기에서 여러 가지로 데이터를 검색하는 방법은 무엇입니까?

분류에서Dev

ScheduledToastNotification이 UWP에서 앱을 시작하지 않도록하는 방법은 무엇입니까?

분류에서Dev

버튼이 화면 하단에서 시작되고 목록보기가 종료되도록하는 방법은 무엇입니까?

분류에서Dev

전역 상태를 잃지 않고 앱 내에서 탐색하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    Android 탐색 창이 자동으로 열리지 않도록하는 방법은 무엇입니까?

  2. 2

    탐색기에서 .cab 및 .zip 아카이브를 폴더로 나열하지 않도록 설정하는 방법은 무엇입니까?

  3. 3

    Nomad 작업이 종료되지 않도록하는 방법은 무엇입니까?

  4. 4

    페이지에 표시되는 목록보기를 추가하는 방법은 무엇입니까?

  5. 5

    Windows 범용 앱에서 페이지를 탐색하는 방법은 무엇입니까?

  6. 6

    페이지에서 페이지로 데이터를 탐색하는 방법은 무엇입니까?

  7. 7

    다음 페이지를 클릭 할 때 검색 결과와 페이지 매김이 사라지지 않도록하는 방법은 무엇입니까?

  8. 8

    Capybara / Poltergeist가 js 시작 탐색이 완료 될 때까지 기다리도록하는 방법은 무엇입니까?

  9. 9

    클릭 이벤트가 종료되기 전에 이미지를 추가하는 방법은 무엇입니까?

  10. 10

    NativeScript BottomNavigation-> 하단 탐색 항목 탭에서 기본 페이지를 여는 방법은 무엇입니까?

  11. 11

    웹 사이트의 탐색 모음이 항목을 수직으로 나누지 않도록하는 방법은 무엇입니까? (아래 이미지 참조)

  12. 12

    탐색 창 / listeview에 이미지를 추가하는 방법은 무엇입니까?

  13. 13

    반응 형 탐색 메뉴를 페이지 상단에 유지하는 방법은 무엇입니까?

  14. 14

    페이지에서 탐색 또는 단추가 작동하지 않도록 방지

  15. 15

    마스터 세부 정보 페이지에서 탐색 스택없이 페이지를 탐색하는 방법은 무엇입니까?

  16. 16

    React-navigation : TabNavigator에 표시되지 않는 탐색을 추가하는 방법은 무엇입니까?

  17. 17

    Shopify가 <title> </ title>에서 페이지 제목을 자르지 않도록하는 방법은 무엇입니까?

  18. 18

    ZF2 탐색. 이동 경로에 페이지를 표시하지만 메뉴에서이 페이지를 숨기는 방법은 무엇입니까?

  19. 19

    MSMessagesViewController-> UIContainerView-> UINavigationController-> UITableViewController로 탐색 모음이 사라지지 않도록하는 방법은 무엇입니까?

  20. 20

    종료하기 전에 이벤트 루프가 비어있을 때까지 기다리도록 NodeJS를 설정하는 방법은 무엇입니까?

  21. 21

    Geocoder 주소 목록이 null 일 때 앱이 닫히지 않도록하는 방법은 무엇입니까?

  22. 22

    탐색 창에서 로컬 HTML 페이지를 문자열과 연결하는 방법은 무엇입니까?

  23. 23

    Android : 탐색 창에서 설정 페이지를 구현하는 방법은 무엇입니까?

  24. 24

    이 속성 배열이 내보기에 표시되지 않도록하는 방법은 무엇입니까?

  25. 25

    웹 개발 : 브라우저에 페이지를 '저장'하고 탐색 할 때마다 페이지가 다시로드되지 않도록하는 방법

  26. 26

    목록보기에서 여러 가지로 데이터를 검색하는 방법은 무엇입니까?

  27. 27

    ScheduledToastNotification이 UWP에서 앱을 시작하지 않도록하는 방법은 무엇입니까?

  28. 28

    버튼이 화면 하단에서 시작되고 목록보기가 종료되도록하는 방법은 무엇입니까?

  29. 29

    전역 상태를 잃지 않고 앱 내에서 탐색하는 방법은 무엇입니까?

뜨겁다태그

보관