Событие (change)
не будет вызвано нажатием кнопки, поскольку «изменение» как таковое отсутствует. Вы должны использовать (click)
вместо этого. Причина, по которой ваш saveCode()
не вызывается, когда вы устанавливаете routerLink
и (click)
, заключается в routerLink
. Когда вы нажимаете кнопку, Angular перемещается на /menu
, прежде чем инициирует событие щелчка. Вы можете перейти от своего компонента в saveCode()
.
Поскольку у вас также есть вызов API в вашем saveCode()
, вероятно, будет лучше, если вы перейдете к успеху, поскольку может не иметь смысла перенаправлять пользователя в случае сбоя вызова API (особенно, если новый маршрут зависит на сохраненные данные)
Попробуйте это в своем коде.
HTML
<button type="submit"
class="btn btn-primary btn-lg float-none m-2"
id="btnAanmaken"
(click)="saveCode($event)">
Aanmaken
</button>
компонент
.subscribe( // subscribe to observable http.post
res => {
console.log("response" + " " + res); // log results otherwise log error
this.router.navigateByUrl('/menu');
},
err => {
console.log('Error occured');
});
Редактировать : Вместо того, чтобы использовать $event
для передачи значений в компонент, вы можете использовать ngForm
, который вы использовали в своем коде вместе с ngModel.
компонент
<input type="text"
list="codes"
class="m-2"
name="restaurantName"
ngModel
>
компонент
@ViewChild('f', { static: true }) form: NgForm;
...
public saveCode (): void {
const name = this.form.value.restaurantName;
...
}
Вот еще один пример из документации о том, как связать значения с формой, используя ngForm и ngModel