Каждая функция контекста выполнения в javascript имеет контекст контекста этот параметр , который задается:
Каким бы ни был этот контекст области видимости, ссылается на «this».
Вы можете изменить это значение для параметра этого контекста области , используя func.call
, func.apply
или func.bind
.
По умолчанию и что сбивает с толку большинство новичков, когда вызывающий вызывающий вызов вызывается после того, как событие добавлено в элемент DOM, контекст области это значение функции является элементом DOM.
jQuery делает это тривиальным для изменения с помощью jQuery.proxy.
[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');
}
Вы хотите, чтобы ваш метод вызывался при нажатии кнопки. Вы можете сделать это, используя (clicK)
:
Вместо
[routerLink]="submitSurvey()"
do
(click)="submitSurvey()"
Затем вы используете маршрутизатор в своем классе, чтобы сделать навигация:
constructor(private router: Router) {}
submitSurvey() {
// ...
this.router.navigate(['/placeOne']);
}
[routerLink]="nextRoute"
просто установит ссылку, но не перейдет к ней. Я думаю, вы должны использовать Router.navigate
вместо этого
– Hikmat G.
13 July 2018 в 16:37
(click)
, вероятно, не будет надежно работать до [routerLink]
, поэтому я обновил ответ с вашим предложением. благодаря
– Kim Kern
13 July 2018 в 16:40