কিভাবে শেষ পৃষ্ঠায় ফিরে যেতে হবে


366

কৌনিক 2 এ শেষ পৃষ্ঠায় ফিরে যাওয়ার কোনও স্মার্ট উপায় আছে?

কিছুটা এইরকম

this._router.navigate(LASTPAGE);

উদাহরণস্বরূপ, পৃষ্ঠা সিতে একটি Go Backবোতাম রয়েছে,

  • পৃষ্ঠা এ -> পৃষ্ঠা সি, এটিতে ক্লিক করুন, পৃষ্ঠার পৃষ্ঠায় ফিরে যান

  • পৃষ্ঠা বি -> পৃষ্ঠা সি, এটিতে ক্লিক করুন, বি পৃষ্ঠায় ফিরে যান

রাউটারের কি এই ইতিহাসের তথ্য আছে?

উত্তর:


669

প্রকৃতপক্ষে বিল্ট-ইন লোকেশন পরিষেবাদির সুবিধা নিতে পারেন, এটি একটি "পিছনে" এপিআইয়ের মালিক।

এখানে (টাইপস্ক্রিপ্টে):

import {Component} from '@angular/core';
import {Location} from '@angular/common';

@Component({
  // component's declarations here
})
class SomeComponent {

  constructor(private _location: Location) 
  {}

  backClicked() {
    this._location.back();
  }
}

সম্পাদনা : @ Charith.arumapperuma দ্বারা উল্লিখিত হিসাবে Locationআমদানি করা উচিত @angular/commonতাই import {Location} from '@angular/common';লাইনটি গুরুত্বপূর্ণ।


75
অ্যাংুলার ২ এর পুরানো রিলিজগুলিতে অবস্থানটি "কৌণিক 2 / রাউটার" থেকে আমদানি করা উচিত new
Charith.arumapperuma

2
যদি আপনি এটি ফ্রেমওয়ার্কটিতে অন্তর্নির্মিত করে থাকেন তবে আমি "নেটিভ" "উইন্ডো হিস্টরি.ব্যাক () ব্যবহার করার কোনও কারণ দেখতে পাচ্ছি না;" যা একটি এইচটিএমএল 5 বৈশিষ্ট্য ( ডেভেলপার.মোজিলা.আর.ইন-
আমির সাসন

7
এটির জন্য উপযুক্ত, অ্যাঙ্গুলার 2 এপিআই ডকুমেন্টেশনের জন্য Locationউল্লেখ করেছে: "দ্রষ্টব্য: রুট পরিবর্তনগুলি ট্রিগার করতে রাউটার পরিষেবাটি ব্যবহার করা ভাল। আপনি যদি রাউটিংয়ের বাইরে যোগাযোগ করতে বা সাধারণীকৃত URL তৈরি করার প্রয়োজন হয় তবেই অবস্থানটি ব্যবহার করুন" " @ সাস্সার উত্তরটি আপাতদৃষ্টিতে এটি করার কোনও উপায় দেখায় Router। তবে, Locationপদ্ধতিটি অবশ্যই আরও সুবিধাজনক। কেউ কি জানেন যে কেন Routerপদ্ধতির চেয়ে Locationপদ্ধতিটি আরও সঠিক হতে পারে ?
অ্যান্ড্রু উইলিয়ামস

2
@ অ্যান্ড্রু: আমি সমস্যার মুখোমুখি হয়েছি, আপনি যদি এই। লোকেশন.ব্যাক () ব্যবহার করেন তবে আপনি দুবার ফিরে যেতে পারবেন না। আপনি প্রাথমিক সাইটে ফিরে যেতে হবে।
জোহানেস

1
@ yt61, নিশ্চিত নন, সম্ভবত পুনরায় ব্যবহারের যোগ্যতা? বা যদি আপনি বিভিন্ন রুট থেকে একটি নির্দিষ্ট পৃষ্ঠায় যেতে পারেন, তবে আপনি ফিরে যেতে রাস্তাটি আগেই জানেন না।
আমির সাসন

111

ইন চূড়ান্ত সংস্করণ কৌণিক এর 2.x / 4.x - এখানে ডক্স এর https://angular.io/api/common/Location

/* typescript */

import { Location } from '@angular/common';
// import stuff here

@Component({
// declare component here
})
export class MyComponent {

  // inject location into component constructor
  constructor(private location: Location) { }

  cancel() {
    this.location.back(); // <-- go back to previous location on cancel
  }
}

1
পূর্ববর্তী স্ক্রিনে ফিরে নেভিগেট করার সময় আমরা পরিষেবার কোনও বস্তু ব্যবহার না করে ইনপুট প্রবেশ মূল্যগুলি ধরে রাখতে পারি।
ভিগনেশ

অবস্থান.ব্যাক () কার্যকর করা অবস্থায় অ্যানিমেশনটি কীভাবে ফিরে দেখানো যায়?
তুষারঘাঁটি

48

<button backButton>BACK</button>

আপনি এটি একটি নির্দেশিকাতে রাখতে পারেন, এটি যে কোনও ক্লিকযোগ্য উপাদানের সাথে সংযুক্ত করা যেতে পারে:

import { Directive, HostListener } from '@angular/core';
import { Location } from '@angular/common';

@Directive({
    selector: '[backButton]'
})
export class BackButtonDirective {
    constructor(private location: Location) { }

    @HostListener('click')
    onClick() {
        this.location.back();
    }
}

ব্যবহার:

<button backButton>BACK</button>

সেটা খুবই ভালো!
রাফায়েল ডি কাস্ত্রো

1
আপনি যদি এই পৃষ্ঠায় রিফ্রেশ করেন এবং "this.location.back ()" কে ট্রিগার করে এমন বোতামটিতে ক্লিক করুন, এটি কেবল একটি পৃষ্ঠা রিফ্রেশকে ট্রিগার করবে। পূর্ববর্তী পথটি বিদ্যমান থাকলে অবস্থান মডিউলটি সনাক্ত করতে পারে এমন কোনও উপায় আছে?
হেনরি লোসিজেড

ভাল কাজ মানুষ! ;)
21:32

যদি ব্যবহারকারী কোনও পৃষ্ঠায় ফিরে যান যেখানে ব্যাক বোতামটি উপস্থিত থাকে এবং যদি সে একটি বোতামে ক্লিক করে থাকে তবে মনে রাখবেন .. তবে ব্রাউজারের (প্ল্যাটফর্ম) ইতিহাস অনুসারে তাকে অ্যাপ্লিকেশন থেকে পূর্ববর্তী পৃষ্ঠায় ফেলে দেওয়া হবে।
হ্যাস্ট্রব

ভবিষ্যতের পাঠকদের জন্য, API
ডক্সটি

23

কৌণিক 5.2.9 দিয়ে পরীক্ষিত

আপনি যদি বোতামের পরিবর্তে অ্যাঙ্কর ব্যবহার করেন তবে আপনাকে অবশ্যই কৌনিক অবস্থানের কাজটি করতে এটি একটি প্যাসিভ লিঙ্ক তৈরি href="javascript:void(0)"করতে হবে।

app.component.ts

import { Component } from '@angular/core';
import { Location } from '@angular/common';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
})
export class AppComponent {

  constructor( private location: Location ) { 
  }

  goBack() {
    // window.history.back();
    this.location.back();

    console.log( 'goBack()...' );
  }
}

app.component.html

<!-- anchor must be a passive link -->
<a href="javascript:void(0)" (click)="goBack()">
  <-Back
</a>

আমি ব্যবহারের পরিবর্তে একটি 'ক্লিকপ্রিভেন্টডিফল্ট' নির্দেশনা তৈরি করার পরামর্শ দেব javascript:void(0)। এরকম কিছু ... @Directive({ selector: '[clickPreventDefault]' }) export class ClickPreventDefaultDirective { @HostListener("click", ["$event"]) onClick($event: Event) { $event.preventDefault(); } }
BM২

আপনাকে @ বিএমডি ধন্যবাদ, এটি আরও বিস্তৃত উপায় তবে এটি খুব কার্যকর। আর একটি কার্যক্ষম সমাধান হ'ল হার্ফ ব্যবহার করবেন না: <a (ক্লিক ক্লিক করুন="goBack()"> যদিও এই ভাবে এইচটিএমএল ভ্যালিডেটরগুলি পাস না।
জাভিয়েরফুয়েন্টেস

20

আপনি routerOnActivate()আপনার রুট শ্রেণিতে পদ্ধতিটি প্রয়োগ করতে পারেন , এটি পূর্বের রুট সম্পর্কিত তথ্য সরবরাহ করবে।

routerOnActivate(nextInstruction: ComponentInstruction, prevInstruction: ComponentInstruction) : any

তারপরে আপনি router.navigateByUrl()উত্পন্ন ডেটা ব্যবহার এবং পাস করতে পারেন ComponentInstruction। উদাহরণ স্বরূপ:

this._router.navigateByUrl(prevInstruction.urlPath);

এটি এখনও কৌনিক 2.1.0 এর জন্য বৈধ?
স্মার্টমাউস

1
@ স্মার্টমাউস আমি এটি মনে করি না, এর জন্য ডকুমেন্টেশন রয়েছেrouterOnActivate
বোজন কোগোজ

4
এই উত্তরের রাউটারঅ্যাক্টিভেট () লিঙ্কটি নষ্ট হয়ে গেছে। মনে হচ্ছে এটি রিলিজ সংস্করণে করার উপায় নয়।
আরএমসিচারি

14

আমার যখন ফাইল সিস্টেমের মতো ফিরে যেতে হবে তখনও আমার জন্য কাজ করুন। PS @angular: "^ 5.0.0"

<button type="button" class="btn btn-primary" routerLink="../">Back</button>

7
আমি আশাবাদী এটি কাজ করবে তবে পৃষ্ঠায় নেভিগেট করার আগে আপনি যে রুটে ছিলেন সে পথে নয় - এটি তার উপরের পরবর্তী রুটে ফিরে যায়। এটি বিদ্যমান তা জেনে রাখা ভাল, তবে আপনার উপাদানগুলির জন্য যদি আপনার একাধিক এন্ট্রি পয়েন্ট থাকে তবে এই পদ্ধতিটি কেবল কখনও উপরের রুটে ফিরে যাবে, আপনি যেখান থেকে উদ্ভূত সেখান থেকে নয়।
স্কট বায়ার্স

আমি যখন লিখি "যখন ফাইল সিস্টেমে আমাকে ফিরে যেতে হবে" :) আমার জন্য, এই আচরণটিও অপ্রত্যাশিত ছিল।
শেভতসিভ অ্যান্ড্রি

12

আমি আমার বোতামটিতে যে কোনও জায়গায় পুনরায় ব্যবহার করতে পারি এমন একটি বোতাম তৈরি করেছি।

এই উপাদান তৈরি করুন

import { Location } from '@angular/common';
import { Component, Input } from '@angular/core';

@Component({
    selector: 'back-button',
    template: `<button mat-button (click)="goBack()" [color]="color">Back</button>`,
})
export class BackButtonComponent {
    @Input()color: string;

  constructor(private location: Location) { }

  goBack() {
    this.location.back();
  }
}

তারপরে আপনার কোনও পিছনের বোতামের দরকার হলে এটি কোনও টেমপ্লেটে যুক্ত করুন।

<back-button color="primary"></back-button>

দ্রষ্টব্য: এটি কৌণিক উপাদান ব্যবহার করছে, আপনি যদি সেই লাইব্রেরি ব্যবহার না করে থাকেন তবে mat-buttonএবং color


এই পদ্ধতির নামযুক্ত রাউটার আউটলেটগুলি যদিও কাজ করে? বলুন যে পৃষ্ঠাটিতে আমার বেশ কয়েকটি রয়েছে এবং কেবলমাত্র সেগুলির একটিতে ফিরে যেতে চাই, এই কাজটি করবে?
rrd

এই পরিস্থিতির জন্য আপনাকে আলাদা পদ্ধতি ব্যবহার করতে হবে। দুটি ভিন্ন রাউটার আউটলেটগুলিতে যদি আপনার একই ব্যাক বোতামটি থাকে তবে তারা সম্ভবত দুজনেই একই কাজ করবে এবং পরিবর্তিত হয়ে শেষ রাউটার আউটলেটে ফিরে যাবে।
টড স্কেলটন

নামযুক্ত আউটলেটগুলির জন্য, আমি দেখতে পেলাম যে এই পদ্ধতিটি কাজ করেছে: this.router.navigate ([['../' '], {আত্মীয়তা: এই.রোউটি})
আরআরডি

এই উপাদানটি অন্য উপাদানগুলির অভ্যন্তরে কীভাবে ব্যবহার করবেন?
আরএন কুশওয়াহা

12

এই সমস্ত দুর্দান্ত উত্তর পরে, আমি আশা করি আমার উত্তরটি কেউ খুঁজে পেয়েছে এবং সেগুলিকে সাহায্য করবে। রুটের ইতিহাস ট্র্যাক রাখতে আমি একটি ছোট্ট পরিষেবা লিখেছি। এখানে এটা যায়.

import { Injectable } from '@angular/core';
import { NavigationEnd, Router } from '@angular/router';
import { filter } from 'rxjs/operators';

@Injectable()
export class RouteInterceptorService {
  private _previousUrl: string;
  private _currentUrl: string;
  private _routeHistory: string[];

  constructor(router: Router) {
    this._routeHistory = [];
    router.events
      .pipe(filter(event => event instanceof NavigationEnd))
      .subscribe((event: NavigationEnd) => {
        this._setURLs(event);
      });
  }

  private _setURLs(event: NavigationEnd): void {
    const tempUrl = this._currentUrl;
    this._previousUrl = tempUrl;
    this._currentUrl = event.urlAfterRedirects;
    this._routeHistory.push(event.urlAfterRedirects);
  }

  get previousUrl(): string {
    return this._previousUrl;
  }

  get currentUrl(): string {
    return this._currentUrl;
  }

  get routeHistory(): string[] {
    return this._routeHistory;
  }
}

কম-বেশি সব সমাধানের চেষ্টা করার পরে, আমি এটি খুঁজে পাওয়ার এটি আরও নিরন্তর উপায়
এ।

যদি আমি নির্দিষ্ট লিঙ্কে পৃষ্ঠাটি খুলি এবং আমি চাই যে এটি পৃষ্ঠা গাছের পৃষ্ঠায় ফিরে যাবে?
ইভান

8

বিভিন্ন পৃষ্ঠায় নেভিগেট করার সময় আমি যেভাবে এটি করেছি তা বর্তমান অবস্থানটি পেরিয়ে একটি কোয়েরি পরম যুক্ত করে

this.router.navigate(["user/edit"], { queryParams: { returnUrl: this.router.url }

আপনার উপাদানটিতে এই ক্যোয়ারী পরমটি পড়ুন

this.router.queryParams.subscribe((params) => {
    this.returnUrl = params.returnUrl;
});

রিটার্নআরএল উপস্থিত থাকলে পিছনের বোতামটি সক্ষম করুন এবং যখন ব্যবহারকারী পিছনে বোতামটি ক্লিক করেন

this.router.navigateByUrl(this.returnUrl); // Hint taken from Sasxa

এটি পূর্ববর্তী পৃষ্ঠায় নেভিগেট করতে সক্ষম হওয়া উচিত। লোকেশন.ব্যাক ব্যবহার করার পরিবর্তে আমি অনুভব করি যে উপরের পদ্ধতিটি ব্যবহারকারীরা আপনার পৃষ্ঠায় সরাসরি অবতরণ করছে এবং যদি তিনি লোকেশন সহ পিছনের বোতামটি টিপেন তবে এটি আগের পৃষ্ঠায় ব্যবহারকারীকে পুনঃনির্দেশ করবে যা আপনার ওয়েব পৃষ্ঠা হবে না।


অ্যাক্টিভেটেডরউট আমদানি করতে হবে এবং ক্যোয়ারীপ্যারাম সাবস্ক্রিপশনে রাউটারের পরিবর্তে এটি ব্যবহার করুন (উদাহরণস্বরূপ, this.route.queryParams.subscribe), তবে অন্যথায়, এটি কাজ করে বলে মনে হচ্ছে!
স্টিফেন কায়সার

আমার জন্য এটি রাউটারের সাথে নিজেই কৌণিক 4
পুনেথ রাই

1
সেরা উত্তর, তবে কৌণিক 5 এ (x পর্যন্ত?) আপনাকে "অ্যাক্টিভেটেডরউট" এর একটি বস্তু ইনজেক্ট করতে হবে এবং স্টিফেন কায়সার ইতিমধ্যে জানিয়েছে বলে এই অবজেক্টে কোয়েরিপ্যারাম ব্যবহার করতে হবে।
সাতরিয়া


3

পৃষ্ঠাটি রিফ্রেশ না করে ফিরে যেতে, আমরা জাভাস্ক্রিপ্টের নীচের মতো এইচটিএমএল করতে পারি : ইতিহাস.ব্যাক ()

<a class="btn btn-danger" href="javascript:history.back()">Go Back</a>

Locationপরিবর্তে পরিষেবাটি ব্যবহার করার পরামর্শ দেব । অফিসিয়াল এপিআই
হ্যাস্ট্রব


2

কৌণিক 4 ব্যবহারে preserveQueryParams, প্রাক্তন:

url: /list?page=1

<a [routerLink]="['edit',id]" [preserveQueryParams]="true"></a>

লিঙ্কটি ক্লিক করার সময়, আপনাকে পুনর্নির্দেশ করা হবে edit/10?page=1, প্যারাম সংরক্ষণ করে

রেফ: https://angular.io/docs/ts/latest/guide/router.html#!# লিঙ্ক- পরিমিতি- অ্যারে


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.