routerlink = & ldquo; functionName () & rdquo; вызывается сразу после загрузки страницы

Каждая функция контекста выполнения в javascript имеет контекст контекста этот параметр , который задается:

  1. Как вызывается функция ( в том числе в качестве метода объекта, использование call и применяется , использование new )
  2. Использование связывания
  3. Лексически для функций стрелок (они принимают этот своего внешнего контекста выполнения)

Каким бы ни был этот контекст области видимости, ссылается на «this».

Вы можете изменить это значение для параметра этого контекста области , используя func.call, func.apply или func.bind.

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

jQuery делает это тривиальным для изменения с помощью jQuery.proxy.

0
задан Kim Kern 13 July 2018 в 16:35
поделиться

2 ответа

[routerLink] - вход, обратите внимание на []. Таким образом, Angular решит это немедленно и каждый цикл обнаружения изменений, чтобы удовлетворить шаблон. Вы хотите использовать (click), который является выводом, обратите внимание на () и будет вызываться только при нажатии кнопки. Затем вместо того, чтобы возвращать URL-адрес функции submitSurvey(), вызовите router.navigate () (сначала введите маршрутизатор.)

html

<button class="btn btn-primary" (click)="submitSurvey()" routerLinkActive="active">Finish</button>

ts

constructor(private router: Router) { }

public submitSurvey(): void {
  // Make sure everything is answered
  const allOKClientSide: boolean = this.surveyService.checkEntireForm(this.thisSurvey);

  if (allOKClientSide) {
    if (this.surveyService.checkFormOnline(this.thisSurvey).subscribe()) {
      this.router.navigateByUrl('/placeOne');
      return;
    }
  }

  this.router.navigateByUrl('/placeTwo');
}
5
ответ дан William Lohan 17 August 2018 в 12:24
поделиться
  • 1
    Это работает отлично, оцените! Спасибо за объяснение, теперь это имеет больше смысла. – Aaron 13 July 2018 в 18:08

Вы хотите, чтобы ваш метод вызывался при нажатии кнопки. Вы можете сделать это, используя (clicK):

Вместо

[routerLink]="submitSurvey()"

do

(click)="submitSurvey()"

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

constructor(private router: Router) {}

submitSurvey() {
    // ...
    this.router.navigate(['/placeOne']);
}
2
ответ дан Kim Kern 17 August 2018 в 12:24
поделиться
  • 1
    [routerLink]="nextRoute" просто установит ссылку, но не перейдет к ней. Я думаю, вы должны использовать Router.navigate вместо этого – Hikmat G. 13 July 2018 в 16:37
  • 2
    Вы правы, (click), вероятно, не будет надежно работать до [routerLink], поэтому я обновил ответ с вашим предложением. благодаря – Kim Kern 13 July 2018 в 16:40
Другие вопросы по тегам:

Похожие вопросы: