Как вернуться на последнюю страницу



есть ли умный способ вернуться на последнюю страницу в Angular 2?



что-то вроде



this._router.navigate(LASTPAGE);


например, страница C имеет Вернуться Назад,




  • страницы -> страница c, щелкните его, вернуться к странице А.


  • страница B - > страница C, нажмите на нее, вернитесь на страницу B.



есть ли у маршрутизатора эта информация истории?

1128   12  

12 ответов:

на самом деле вы можете воспользоваться встроенной службой определения местоположения, которая владеет api "назад".

здесь (машинопись):

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();
    }
}

на окончательный вариант угловой 2.x / 4.x-вот документы https://angular.io/docs/ts/latest/api/common/index/Location-class.html

/* 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
  }
}

вы можете реализовать routerOnActivate() метод на вашем классе маршрута, он предоставит информацию о предыдущем маршруте.

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

затем вы можете использовать router.navigateByUrl() и передать данные, полученные от ComponentInstruction. Например:

this._router.navigateByUrl(prevInstruction.urlPath);

испытано с угловым 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>

также работает для меня, когда мне нужно вернуться в файловой системе. P.S. @angular: "^5.0.0"

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

в RC4:

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

Я сделал кнопку, которую я могу использовать в любом месте моего приложения.

создать этот компонент

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.

как я сделал это при переходе на другую страницу Добавить запрос param, передавая текущее местоположение

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

прочитайте этот запрос param в вашем компоненте

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

Если returnUrl присутствует включить кнопку назад и когда пользователь нажимает кнопку Назад

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

Это должно быть в состоянии перейти к предыдущей странице. Вместо того, чтобы использовать местоположение.назад я чувствую, что приведенный выше метод более безопасен рассмотрим случай, когда пользователь непосредственно попадает на вашу страницу, и если он нажимает кнопку "назад" с места.назад он перенаправляет пользователя на предыдущую страницу, которая не будет вашей веб-страницы.

в угловой 4 использовать preserveQueryParams, например:

url: /list?page=1

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

при нажатии на ссылку, вы будете перенаправлены edit/10?page=1, сохраняя params

ref:https://angular.io/docs/ts/latest/guide/router.html#! # link-параметры-массив

другое решение

window.history.back();

начиная с бета-версии 18:

import {Location} from 'angular2/platform/common';

вы можете поместить это в директиву, которая может быть прикреплена к любому кликабельному элементу:

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>

Comments

    Ничего не найдено.