Как закрыть модальный код в Angular 2?
Я хочу, чтобы пользователь нажимал кнопку "Отправить", а модальный автоматически закрывался.
Если я добавлю data-dismiss="modal"
в Submit <button>
, он не будет запускать submitComments()
.
Я попытался сделать что-то вроде $('#myModal').modal('hide');
, но не получилось.
Итак, как я могу закрыть modal в Angular 2? Благодаря
<button type="button" class="btn btn-info" data-toggle="modal" data-target="#myModal">Open Modal</button>
<div id="myModal" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-body">
<form (ngSubmit)="submitComments()">
<div class="form-group row">
<label class="form-control-label col-sm-2">Comments:</label>
<div class="col-sm-10">
<textarea class="form-control" rows="3"></textarea>
</div>
</div>
<div class="form-group row">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-default">Submit</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
.
submitComments() {
// I want to do something like $('#myModal').modal('hide'); here.
}
Ответы
Ответ 1
Помимо ответа @MattScarpino другой вариант - просто измените тип кнопки на button
с submit
и вызовите свою функцию
submitComments()
и в то же время вызовите dismiss-modal
.
делая это, вы можете одновременно отказаться от модальных функций и вызовов, надеясь, что это может вам помочь.
вот пример:
<button type="button" class="btn btn-info" data-toggle="modal" data-target="#myModal">Open Modal</button>
<div id="myModal" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-body">
<form>
<div class="form-group row">
<label class="form-control-label col-sm-2">Comments:</label>
<div class="col-sm-10">
<textarea class="form-control" rows="3"></textarea>
</div>
</div>
<div class="form-group row">
<div class="col-sm-offset-2 col-sm-10">
<button type="button" (click)='submitComments()' data-dismiss="myModal" class="btn btn-default">Submit</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
Update
если вы хотите закрыть модальный со стороны вашего контроллера, вы можете использовать этот способ
$("#myModal").modal("hide");
Ответ 2
Вы можете сделать это, просто объявив переменную jQuery с любым типом внутри контроллера Angular2.
declare var jQuery:any;
Добавьте это сразу после операторов импорта и перед декодером компонентов.
Затем загрузите bootstrap с его идентификатором id.
jQuery("#myModal").modal("hide");
Ответ 3
Используя @ViewChild
добавить #closeBtn
к элементу с data-dismiss="modal"
<a><i class="fa fa-close" data-dismiss="modal" #closeBtn></i></a>
Компонент html
<div class="modal fade" id="yourModalId">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<a><i class="fa fa-close" data-dismiss="modal" #closeBtn></i></a>
</div>
<div class="modal-body">
</div>
<div class="modal-footer">
</div>
</div>
</div>
</div>
используя this.closeBtn.nativeElement.click();
, чтобы вызвать событие click, закроет ваш модальный.
Компонент typescript
import {ViewChild, ElementRef} from '@angular/core';
@Component({
moduleId: ...,
selector: '.',
templateUrl: '.',
styleUrls: ['.']
})
export class yourClass {
@ViewChild('closeBtn') closeBtn: ElementRef;
yourFunction() {
//do something
...
...
//close your modal
this.closeModal();
}
//call this wherever you want to close modal
private closeModal(): void {
this.closeBtn.nativeElement.click();
}
}
Ответ 4
Сначала установите свойство div hidden
равным переменной:
<div id="myModal" [hidden]="hideModal" class="modal fade">
Во-вторых, в классе определите логическое имя с именем hideModal
и установите для него значение false:
hideModal: boolean = false;
В-третьих, в submitComments()
установите hideModal
в значение true.
Ответ 5
Идеальный ответ в этой вселенной.........................
шаг 1: дать уникальный идентификатор кнопке увольнения модального
шаг 2: после успешной отправки формы или завершения вызова задачи
document.getElementById("addProductCloseButton").click();
в вашем классе
Ответ 6
Попытайтесь не включать форму в свое модальное тело, вместо этого добавьте две кнопки для того же самого в разделе нижнего колонтитула.
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"><span aria-hidden="true">×</span></button>
</div>
<div class="modal-body">
<label class="form-control-label col-sm-2">Comments:</label>
<div class="col-sm-10">
<textarea class="form-control" rows="3"></textarea>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-default" data-dismiss="modal" aria-hidden="true">Close</button>
<button type="submit" class="btn btn-primary" >Save changes</button>
</div>
</div>
</div>
</div>