Как перезагрузить текущий маршрут с угловым маршрутизатором 2

141

Я использую Angular 2 со стратегией hashlocation.

Компонент загружен этим маршрутом:

"departments/:id/employees"

Пока все хорошо.

После успешного пакетного сохранения нескольких отредактированных строк таблицы, я хочу перезагрузить текущий URL маршрута через:

this.router.navigate([`departments/${this.id}/employees`]);

Но ничего не происходит, почему?

паскаль
источник
Взгляните на этот ответ на похожий вопрос: stackoverflow.com/a/44580036/550975
Серж Саган
tech-blog.maddyzone.com/angularjs/javascript/… очень полезно
Rituraj ratan

Ответы:

47

Если ваш navigate () не меняет URL, который уже показан в адресной строке вашего браузера, маршрутизатор не имеет ничего общего. Обновление данных не является задачей маршрутизатора. Если вы хотите обновить данные, создайте сервис, внедренный в компонент, и вызовите функцию загрузки в сервисе. Если новые данные будут получены, он обновит представление через привязки.

Яков Файн
источник
2
Теперь вы говорите , я должен согласиться но ... angularjs пользовательского интерфейса маршрутизатор был вариантом перезагрузки , таким образом , перегрузочный маршрутом будет opiniated ;-) Но да , я мог бы просто сделать ТНХ перезарядки данных для этого наконечника , который на самом деле очевидно ...
Паскаль
83
Я не согласен, что, если вы хотите перезапустить охранников, скажем, если кто-то выходит из системы?
Джеки,
1
@ Джеки, я думал, что, может быть, ты мог бы просто перезапустить охранников ... если у них есть встроенные перенаправления, то это может сработать.
OldTimeGuitarGuy
11
@YakovFain извините, но это неверно. Это означает, что теперь у вас есть два источника правды для поведения маршрута - один происходит во время охраны, другой - в компоненте. Вы не только теперь потенциально дублируете логику, но и противостоите более естественному потоку данных: 1. вносите изменения в API, 2. обновляете маршрут для извлечения нового состояния данных из API, делая API источником истины. Просто нет причин НЕ давать пользователям возможность вручную повторно запускать маршрут, чтобы естественный поток данных мог повториться снова.
AgmLauncher
4
Я не думаю, что это хороший ответ. Маршрутизатор должен быть источником правды для ваших данных. Если вам нужно перезагрузить его через отдельную службу, то маршрутизатор больше не знает о последней версии, и ваши компоненты больше не могут полагаться на ваш маршрутизатор в качестве источника правды.
Дэн Кинг
125

Теперь это можно сделать в Angular 5.1, используя onSameUrlNavigationсвойство конфигурации Router.

Я добавил блог, объясняющий, как здесь, но суть в следующем

https://medium.com/engineering-on-the-incline/reloading-current-route-on-click-angular-5-1a1bfc740ab2

В настройках конфигурации роутера включите onSameUrlNavigationего 'reload'. Это заставляет маршрутизатор запускать цикл событий, когда вы пытаетесь перейти к уже активному маршруту.

@ngModule({
 imports: [RouterModule.forRoot(routes, {onSameUrlNavigation: 'reload'})],
 exports: [RouterModule],
 })

В ваших определениях маршрута установите runGuardsAndResolversна always. Это скажет маршрутизатору всегда запускать циклы защиты и распознавания, вызывая связанные события.

export const routes: Routes = [
 {
   path: 'invites',
   component: InviteComponent,
   children: [
     {
       path: '',
       loadChildren: './pages/invites/invites.module#InvitesModule',
     },
   ],
   canActivate: [AuthenticationGuard],
   runGuardsAndResolvers: 'always',
 }
]

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

export class InviteComponent implements OnInit, OnDestroy {
 navigationSubscription;     

 constructor(
   // … your declarations here
   private router: Router,
 ) {
   // subscribe to the router events. Store the subscription so we can
   // unsubscribe later.
   this.navigationSubscription = this.router.events.subscribe((e: any) => {
     // If it is a NavigationEnd event re-initalise the component
     if (e instanceof NavigationEnd) {
       this.initialiseInvites();
     }
   });
 }

 initialiseInvites() {
   // Set default values and re-fetch any data you need.
 }

 ngOnDestroy() {
   if (this.navigationSubscription) {
     this.navigationSubscription.unsubscribe();
   }
 }
}

После выполнения всех этих шагов у вас должна быть включена перезагрузка маршрута.

Саймон МакКлайв
источник
Есть ли способ перезагрузить компонент вместо вызова initфункции,
Ebraheem Alrabeea
Я так не думаю ... если вы не уйдете с маршрута и не вернетесь снова. Функция init не является концом света, вы можете управлять инициализацией до такой степени, что она будет иметь тот же эффект, что и перезагрузка компонента. Есть ли какая-то конкретная причина, по которой вы хотите выполнить полную перезагрузку init?
Саймон МакКлайв
Я нашел решение для моей проблемы, спасибо за ваш ответ и блог, это было полезно.
Ebraheem Alrabeea
Как это сделать в Angular 4, кроме перезагрузки окна.
Вишаха
Отлично работает для моего приложения Angular5! Отказ от подписки в ngOnDestroy () довольно важен - интересно, когда вы этого не делаете :-)
BobC
107

Создайте функцию в контроллере, которая перенаправляет на ожидаемый маршрут, например

redirectTo(uri:string){
   this.router.navigateByUrl('/', {skipLocationChange: true}).then(()=>
   this.router.navigate([uri]));
}

затем используйте это так

this.redirectTo('//place your uri here');

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

Тео Шарксон
источник
3
Спасибо! Лучшее решение здесь.
Алан Смит
Это решение работает хорошо, мы можем использовать его, пока не получим лучшее. Спасибо, Тео.
Сибееш Вену
12
это работает как очарование, когда я использовал '/'вместо'/DummyComponent'
suhailvs
1
Прекрасно работает в Angular 7, без проблем в истории браузера. Я решил использовать это решение из-за нацеливания на определенный компонент. Мне кажется, что перезагрузка одной и той же страницы, как правило, ненормальная ситуация, поэтому заставить все приложение следовать определенной парадигме кажется излишним. Это мало и проще в реализации, чем другие решения.
JE Carter II
1
Хорошо, это работает, но ... он перезагрузит ваш HomeComponent (или все, что у вас есть на маршруте "/"), пройдет полный жизненный цикл ngOnInit / ngOnDestroy бесплатно. Лучше иметь определенный маршрут с какой-нибудь фиктивной и легкой
деталью,
77

РЕДАКТИРОВАТЬ

Для более новых версий Angular (5.1+) используйте ответ, предложенный @Simon McClive

Старый ответ

Я нашел этот обходной путь для запроса функции GitHub для Angular:

this._router.routeReuseStrategy.shouldReuseRoute = function(){
    return false;
};

this._router.events.subscribe((evt) => {
    if (evt instanceof NavigationEnd) {
        this._router.navigated = false;
        window.scrollTo(0, 0);
    }
});

Я попытался добавить это в мой app.component.ts ngOnInit функции , и это, , сработало. Все дальнейшие клики по той же ссылке теперь перезагружают componentданные и.

Ссылка на оригинальный запрос GitHub

Кредит идет на mihaicux2 на GitHub.

Я проверил это на версии 4.0.0-rc.3сimport { Router, NavigationEnd } from '@angular/router';

Arg0n
источник
1
Только что попробовал это в Angular 4.4.x, и это полностью работает. Спасибо!
Mindsect Team
1
Это прекрасно работало для меня, пока я не реализовал навигационную панель вкладок Материала для навигации по дочерним маршрутам каждого родительского маршрута в моем приложении. Как только пользователь перейдет на страницу, на которой выполняется этот код, анимированная чернильная полоса исчезнет. (Почему? У меня нет достаточно времени или места, чтобы объяснить ...)
andreisrob
3
Это очень плохая идея - ваш ActivatedRoute теперь всегда будет прежним.
artuska
1
@AnandTyagi Попробуйте решение SimonMcClives, если вы используете Angular 5.1+. Может быть, это работает лучше для вас.
Arg0n
2
Очень плохая идея ... Поскольку после применения routeReuseStrategy.shouldReuseRoute = false, он будет загружать каждый компонент иерархии компонентов. Это означает, что каждый родительский и дочерний компоненты начинают перезагружаться при любых изменениях URL. Так что тогда нет смысла использовать эту платформу.
PSabuwala
27

Немного сложнее: используйте тот же путь с некоторыми фиктивными параметрами. Например-

refresh(){
  this.router.navigate(["/same/route/path?refresh=1"]);
}
невари
источник
12
Теперь: this.router.navigate(['/pocetna'], { queryParams: { 'refresh': 1 } });и route.queryParams.subscribe(val => myRefreshMethod())где route: ActivatedRouteвводится в обновленном компоненте ... Надеюсь, что это помогает
insan-e
4
В настоящее время в Angular 7 это больше не работает. Кто-нибудь может подтвердить, или я что-то не так делаю? (Я тоже попробовал небольшой вариант
Insan
2
Может быть, немного некрасиво.
Дабббб.
19

Я использую этот для проекта Angular 9:

reloadCurrentRoute() {
    let currentUrl = this.router.url;
    this.router.navigateByUrl('/', {skipLocationChange: true}).then(() => {
        this.router.navigate([currentUrl]);
    });
}

PS: Проверено и работает также на "Angular 7, 8"

Андрис
источник
Я подумала, что поделюсь своим опытом с этим решением. Для меня, кажется, перезагрузить весь компонент, связанный с маршрутом. В моей ситуации обычный router.navigate с различными параметрами маршрутизации будет поддерживать загруженный компонент и просто загружать новые изменения из ngOnInit (на основе параметров маршрута). Похоже, что ваше решение этого не делает, оно фактически перезагружает весь компонент, а затем вносит изменения в ngOnInit на основе параметров маршрута. Во всяком случае, для меня это незначительное неудобство в моей ситуации, и ваше решение работает для моих нужд.
Эван Севи
Спасибо вам. работает отлично.
Сантош
17

Угловой 2-4 маршрут перезагрузки взломать

Для меня использование этого метода внутри корневого компонента (компонента, который присутствует на любом маршруте) работает:

onRefresh() {
  this.router.routeReuseStrategy.shouldReuseRoute = function(){return false;};

  let currentUrl = this.router.url + '?';

  this.router.navigateByUrl(currentUrl)
    .then(() => {
      this.router.navigated = false;
      this.router.navigate([this.router.url]);
    });
  }
indreed
источник
Будьте осторожны с этим подходом, это глобально повлияет на поведение маршрутизатора (родительский маршрут всегда будет перезагружаться при переходе между дочерними маршрутами).
seidme
16

Это работает для меня как шарм

this.router.navigateByUrl('/', {skipLocationChange: true}).then(()=>
this.router.navigate([<route>]));
Нитин Камате
источник
3
Это самый простой ответ. Я бы отметил это как принятый ответ, если бы мог. Вопреки принятому ответу, могут быть ситуации, когда вам необходимо перезагрузить каждый отдельный компонент, используемый на странице, и индивидуальная перезагрузка каждого из них, которые могут быть на разных маршрутах, будет избыточной даже через службу.
Эндрю Младший Говард
8

На странице смены параметров перезагрузка не произойдет. Это действительно хорошая особенность. Нет необходимости перезагружать страницу, но мы должны изменить значение компонента. Метод paramChange вызовет изменение URL. Таким образом, мы можем обновить данные компонента

/product/: id / details

import { ActivatedRoute, Params, Router } from ‘@angular/router’;

export class ProductDetailsComponent implements OnInit {

constructor(private route: ActivatedRoute, private router: Router) {
    this.route.params.subscribe(params => {
        this.paramsChange(params.id);
    });
}

// Call this method on page change

ngOnInit() {

}

// Call this method on change of the param
paramsChange(id) {

}
Karthi
источник
8

Это то, что я сделал с Angular 9 . Я не уверен, что это работает в старых версиях.

Вам нужно будет позвонить, когда вам нужно перезагрузить.

 this.router.navigate([], {
    skipLocationChange: true,
    queryParamsHandling: 'merge' //== if you need to keep queryParams
  })

Маршрутизатор forRoot должен иметь значение SameUrlNavigation для перезагрузки

 RouterModule.forRoot(appRoutes, {
  // ..
  onSameUrlNavigation: 'reload',
  // ..
})

И каждый ваш маршрут должен иметь runGuardsAndResolvers, установленный на «всегда»

{
    path: '',
    data: {},
    runGuardsAndResolvers: 'always'
},
Wlada
источник
1
Это правильный ответ. «onSameUrlNavigation» работает с Angular 5. Пожалуйста, добавьте комментарий, чтобы переместить его наверх
Ярослав Яковлев
Это не сработало для меня. Андрис ниже сделал. Хотя перезагрузка Андриса не так чиста, как обычная навигация по маршруту. Кажется, он не перезагружает всю страницу, но он, кажется, перезагружает весь компонент, связанный с маршрутом. Мне просто нужно было перезагрузить дочерние компоненты на основе параметров маршрута, а не весь компонент, связанный с маршрутом. Во всяком случае, это работает достаточно хорошо. Просто подумал, что я буду вмешиваться в мой опыт.
Эван Севи
4

Для меня работает hardcoding с

this.router.routeReuseStrategy.shouldReuseRoute = function() {
    return false;
    // or
    return true;
};
Влад
источник
1
Не рекомендуется! Люди продолжают повторно публиковать это решение по-разному в рамках этой СО. Да, это может решить вашу непосредственную проблему, но позже вы забудете, что реализовали это, и будете часами пытаться выяснить, почему ваше приложение работает странно.
Хельзгейт,
Если вы должны использовать это, используйте решение Ebraheem Alrabee 'и применяйте его только к одному маршруту.
Хельзгейт
4

Насколько я знаю, это не может быть сделано с маршрутизатором в Angular 2. Но вы могли бы просто сделать:

window.location.href = window.location.href

Чтобы перезагрузить вид.

Привет мир
источник
3
Это обновляет все приложение, а не только текущий маршрут!
Ростамиани
@HelloWorld - Где поставить таким образом логику в angular 7?
Pra_A
Неважно, какая угловая версия - это обычный код js
HelloWorld,
Поместите это на функцию щелчка. window.location.href = '/' или '/ login', которые всегда определяются внутри app-routing.module.ts. В моем случае, когда пользователь выходит из системы, он должен вернуться к экрану входа в систему, поэтому при выходе из системы я очищаю все данные авторизации и в случае успеха использую window.location.href = '/'. Это означает перезагрузку страницы регистрации и повторный запуск всего JavaScript. Для нормального изменения маршрута я не буду рекомендовать это, если перезапуск функций не требуется.
Али Экзальтер
Я считаю, что это может полностью перезагрузить ваше хранилище NgRx - поэтому любые данные, которые вы уже загрузили, будут потеряны.
Джон Q
3

Нашли быстрое и прямолинейное решение, не требующее возиться с внутренней работой углов:

В основном: просто создайте альтернативный маршрут с тем же модулем назначения и просто переключайтесь между ними:

const routes: Routes = [
  {
    path: 'gesuch',
    loadChildren: './sections/gesuch/gesuch.module#GesuchModule'
  },
  {
    path: 'gesuch-neu',
    loadChildren: './sections/gesuch/gesuch.module#GesuchModule'
  }
];

А вот переключаемое меню:

<ul class="navigation">
    <li routerLink="/gesuch-neu" *ngIf="'gesuch' === getSection()">Gesuch</li>
    <li routerLink="/gesuch" *ngIf="'gesuch' !== getSection()">Gesuch</li>
</ul>

Надеюсь, поможет :)

Карли Бели
источник
Что если альтернативный маршрут имеет параметр, и вы хотите перезагрузить его при изменении параметра?
Мукус
3

Немного хардкор но

this.router.onSameUrlNavigation = 'reload';
this.router.navigateByUrl(this.router.url).then(() => {

    this.router.onSameUrlNavigation = 'ignore';

});
Дмитрий Васильевский
источник
2

В моем случае:

const navigationExtras: NavigationExtras = {
    queryParams: { 'param': val }
};

this.router.navigate([], navigationExtras);

работать правильно

Антон Зимм
источник
2

реализовать OnInit и вызвать ngOnInit () в методе для route.navigate ()

Смотрите пример:

export class Component implements OnInit {

  constructor() {   }

  refresh() {
    this.router.navigate(['same-route-here']);
    this.ngOnInit();   }

  ngOnInit () {

  }
Эвандро Мендес
источник
2

Решил похожий сценарий, используя фиктивный компонент и маршрут для reload, который на самом деле делает redirect. Это определенно не охватывает все пользовательские сценарии, но просто работает для моего сценария.

import { Component, OnInit } from '@angular/core';
import { Router, ActivatedRoute } from '@angular/router';
import { Http } from '@angular/http';

@Component({
  selector: 'reload',
  template: `
    <h1>Reloading...</h1>
  `,
})
export class ReloadComponent implements OnInit{
  constructor(private router: Router, private route: ActivatedRoute) {
  }

  ngOnInit() {
    const url = this.route.snapshot.pathFromRoot.pop().url.map(u => u.path).join('/');
    this.router.navigateByUrl(url);
  }
}

Маршрутизация связана с перехватом всех URL-адресов с использованием подстановочного знака:

import { RouterModule } from '@angular/router';
import { NgModule } from '@angular/core';
import { LoginViewComponent } from './views/login/login.component';
import { HomeViewComponent } from './views/home/home.component';
import { ReloadComponent } from './views/reload/reload.component';

@NgModule({
  declarations: [ 
    LoginViewComponent, HomeViewComponent, ReloadComponent
  ],
  imports: [
    RouterModule.forRoot([
      { path: 'login', component: LoginViewComponent },
      { path: 'home', component: HomeViewComponent },
      { 
        path: 'reload',
        children: [{
          path: '**',
          component: ReloadComponent 
        }]
      },
      { path: '**', redirectTo: 'login'}
    ])
  ],
  exports: [
    RouterModule,
  ],
  providers: [],

})
export class AppRoutingModule {}

Чтобы использовать это, нам просто нужно добавить перезагрузку в URL, куда мы хотим перейти:

  this.router.navigateByUrl('reload/some/route/again/fresh', {skipLocationChange: true})
sabithpocker
источник
2

Существуют разные подходы для обновления текущего маршрута.

Измените поведение маршрутизатора (начиная с версии Angular 5.1). Установите для маршрутизаторов onSameUrlNavigation значение reload. Это будет генерировать события маршрутизатора на той же URL-навигации.

  • Затем вы можете обработать их, подписавшись на маршрут
  • Вы можете использовать его с комбинацией runGuardsAndResolvers для повторного запуска распознавателей

Оставьте роутер нетронутым

  • Передайте обновление queryParam с текущей меткой времени в URL и подпишитесь на queryParams в перенаправленном компоненте.
  • Используйте событие активации маршрутизатора-розетки, чтобы получить перенаправленный компонент.

Я написал более подробное объяснение под адресу https://medium.com/@kevinkreuzer/refresh-current-route-in-angular-512a19d58f6e.

Надеюсь это поможет.

Трафальгарская
источник
1

Предположим, что маршрут компонента, который вы хотите обновить, является viewследующим:

this.router.routeReuseStrategy.shouldReuseRoute = function (future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot) {
  if (future.url.toString() === 'view' && curr.url.toString() === future.url.toString()) {
    return false;
  }
  return (future.routeConfig === curr.routeConfig);
}; 

Вы можете добавить debuggerметод внутри, чтобы знать, какой будет точный маршрут после перехода "departments/:id/employees".

Эбрахим Алрабиа
источник
1

Решение состоит в том, чтобы передать фиктивный параметр (то есть время в секундах), таким образом, ссылка всегда перезагружается:

this.router.navigate(["/url", {myRealData: RealData, dummyData: (new Date).getTime()}])
losciur
источник
1

Я использую setTimeoutиnavigationByUrl для решения этой проблемы ... И это работает нормально для меня.

Он перенаправляется на другой URL и вместо этого снова появляется в текущем URL ...

 setTimeout(() => {
     this.router.navigateByUrl('/dashboard', {skipLocationChange: false}).then(() =>
           this.router.navigate([route]));
     }, 500)
Ajay Hariyal
источник
1

Я считаю, что это было решено (изначально) в Angular 6+; чек

Но это работает для всего маршрута (включая все дочерние маршруты)

Если вы хотите настроить таргетинг на один компонент, вот как: используйте изменяемый параметр запроса, чтобы вы могли перемещаться столько раз, сколько захотите.

В точке навигации (класс)

   this.router.navigate(['/route'], {
        queryParams: { 'refresh': Date.now() }
    });

В компоненте, который вы хотите «обновить / перезагрузить»

// . . . Component Class Body

  $_route$: Subscription;
  constructor (private _route: ActivatedRoute) {}

  ngOnInit() {
    this.$_route$ = this._route.queryParams.subscribe(params => {
      if (params['refresh']) {
         // Do Something
         // Could be calling this.ngOnInit() PS: I Strongly advise against this
      }

    });
  }

  ngOnDestroy() {
    // Always unsubscribe to prevent memory leak and unexpected behavior
    this.$_route$.unsubscribe();
  }

// . . . End of Component Class Body
mbao01
источник
1

Очень обидно, что Angular все еще не предлагает хорошего решения для этого. Я поднял вопрос GitHub здесь: https://github.com/angular/angular/issues/31843

А пока это мой обходной путь. Он основан на некоторых других решениях, предложенных выше, но я думаю, что он немного более надежен. Это включает в себя оборачивание службы маршрутизатора в " ReloadRouter", которая заботится о функциональности перезагрузки, а также добавляетRELOAD_PLACEHOLDER конфигурацию основного маршрутизатора. Это используется для временной навигации и позволяет избежать запуска любых других маршрутов (или охранников).

Примечание: используйте только ReloadRouterв тех случаях, когда вы хотите перезагрузить функциональность. Используйте нормальное в Routerпротивном случае.

import { Injectable } from '@angular/core';
import { NavigationExtras, Router } from '@angular/router';

@Injectable({
  providedIn: 'root'
})
export class ReloadRouter {
  constructor(public readonly router: Router) {
    router.config.unshift({ path: 'RELOAD_PLACEHOLDER' });
  }

  public navigate(commands: any[], extras?: NavigationExtras): Promise<boolean> {
    return this.router
      .navigateByUrl('/RELOAD_PLACEHOLDER', {skipLocationChange: true})
      .then(() => this.router.navigate(commands, extras));
  }
}
Дэн Кинг
источник
1

Импорт Routerи ActivatedRouteиз@angular/router

import { ActivatedRoute, Router } from '@angular/router';

Введите Routerи ActivatedRoute(в случае, если вам нужно что-нибудь из URL)

constructor(
    private router: Router,
    private route: ActivatedRoute,
) {}

Получить любой параметр при необходимости из URL.

const appointmentId = this.route.snapshot.paramMap.get('appointmentIdentifier');

Используя трюк, перейдя к фиктивному или основному URL, а затем к фактическому URL обновит компонент.

this.router.navigateByUrl('/appointments', { skipLocationChange: true }).then(() => {
    this.router.navigate([`appointment/${appointmentId}`])
});

В твоем случае

const id= this.route.snapshot.paramMap.get('id');
this.router.navigateByUrl('/departments', { skipLocationChange: true }).then(() => {
    this.router.navigate([`departments/${id}/employees`]);
});

Если вы используете фиктивный маршрут, вы увидите мигание заголовка «Не найдено», если вы внедрили не найденный URL, если он не совпадает ни с одним URL.

Аамер Шахзад
источник
0

подписаться на изменения параметров маршрута

    // parent param listener ie: "/:id"
    this.route.params.subscribe(params => {
        // do something on parent param change
        let parent_id = params['id']; // set slug
    });

    // child param listener ie: "/:id/:id"
    this.route.firstChild.params.subscribe(params => {
        // do something on child param change
        let child_id = params['id'];
    });
Омар
источник
0

Если вы меняете маршрут через Router Link, выполните следующие действия:

  constructor(public routerNavigate: Router){

         this.router.routeReuseStrategy.shouldReuseRoute = function () {
            return false;
          };

          this.router.events.subscribe((evt) => {

            if (evt instanceof NavigationEnd) {

                this.router.navigated = false;
             }
          })
      }
Омкар Джоши
источник
0

Вам следует использовать свойство onSameUrlNavigation в RouterModule, а затем подписаться на события Route https://blog.angularindepth.com/refresh-current-route-in-angular-512a19d58f6e

Даша лазовская
источник
Ссылка на решение приветствуется, но, пожалуйста, убедитесь, что ваш ответ полезен без нее: добавьте контекст вокруг ссылки, чтобы ваши коллеги-пользователи имели представление о том, что это такое и почему, а затем процитируйте наиболее релевантную часть страницы, которую вы ' Повторная ссылка на случай, если целевая страница недоступна. Ответы, которые немного больше, чем ссылка, могут быть удалены.
Алессио
0

Решает, когда маршрут должен быть сохранен, возвращает false

this.router.routeReuseStrategy.shouldReuseRoute = function () {
    return false;
};

и установите значение роутера в значение false, которое показывает, что этот маршрут никогда не маршрутизировался

this.mySubscription = this.router.events.subscribe(event => {
    if (event instanceof NavigationEnd) {
        this.router.navigated = false;
    }
});
мохит шарма
источник
0

Я пробовал несколько исправлений, и ни одно из них не работает. Моя версия проста: добавить новый неиспользуемый параметр в параметры запроса

            if (force) {
                let key = 'time';

                while (key in filter) {
                    key = '_' + key;
                }

                filter[key] = Date.now();
            }

            this.router.navigate(['.', { filter: JSON.stringify(filter) }]);
tom10271
источник
0

window.location.replace

// используем backtick для включения маршрута

window.location.replace ( departments/${this.id}/employees)

7guyo
источник