Я работаю над проектом Angular-6.Я создал форму внутри модального ngxbootstrap, которая работает нормально.Эта форма имеет различные элементы ввода. Я хочу получить доступ к нескольким из этих элементов, но проблема заключается в том, что всякий раз, когда я пытаюсь получить доступ к этим элементам с помощью @viewchild, результат не определен, что в основном связано с тем, что эти элементы не существуют в DOM.Итак, есть ли способ получить к ним доступ ниже, это мой код ...
@Component({
selector: 'app-roles',
templateUrl: './roles.component.html',
styleUrls: ['./roles.component.scss'],
providers:[NgbActiveModal],
})
export class RolesComponent implements OnInit,AfterViewInit {
@ViewChild('dataTable') table:ElementRef;
@ViewChild('rolename') rolename:ElementRef; //Here it shows undefined
dataTable:any;
roleref:any;
error_array=new Array();
all_roles=new Array();
added:boolean;
closeResult: string;
modalRef: NgbModalRef;
is_shown:boolean;
profileForm=new FormGroup({
rolename:new FormControl('',[Validators.required,Validators.minLength(4)])
});
constructor(private roleservice:RolesService,private fb:FormBuilder,private
modalService: NgbModal,public activeModal: NgbActiveModal)
{
}
ngOnInit() {
this.dataTable=$(this.table.nativeElement);
this.dataTable.dataTable();
}
ngAfterViewInit() {
}
open(content,form:NgForm) {
this.is_shown=true;
this.modalRef = this.modalService.open(content,{
size: "lg",
centered: false,
backdrop: 'static'});
this.modalRef.result.then((result) => {
this.closeResult = `Closed with: ${result}`;
}, (reason) => {
this.closeResult = `Dismissed ${this.getDismissReason(reason)}`;
});
}
private getDismissReason(reason: any): string {
this.is_shown=false;
this.profileForm.reset();
if (reason === ModalDismissReasons.ESC) {
return 'by pressing ESC';
} else if (reason === ModalDismissReasons.BACKDROP_CLICK) {
return 'by clicking on a backdrop';
} else {
return `with: ${reason}`;
}
}
}
Ниже дан код HTML
<ng-template #content let-d="dismiss">
<form class="form" [formGroup]="profileForm" (ngSubmit)="onSubmit()" autocomplete="off" >
<div class="modal-header">
<h4 class="modal-title">Add New Role</h4>
<button type="button" #clsbtn class="close" aria-label="Close" (click)="d('Cross click')">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body" *ngIf="is_shown==true">
<div class="modal-body">
<div class="col-md-5">
<div class="card-content">
<div class="input-group">
<span class="input-group-addon">
<i class="material-icons">face</i>
</span>
<div class="form-group"><input type="text" #rolename formControlName="rolename" class="form-control" placeholder="RoleName..." required/><span class="material-input"></span></div>
<div *ngIf="profileForm.get('rolename').invalid && profileForm.get('rolename').touched" class="alert alert-danger">
<div *ngIf="profileForm.get('rolename').errors.required">
RoleName is required.
</div>
<div *ngIf="profileForm.get('rolename').errors.minlength">
RoleName must be at least 4 characters long.
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<!--<button type="button" class="btn btn-light" (click)="d('Close click')">Close</button>-->
<button class="btn btn-danger btn-round" style="position:relative;right:60px" [disabled]="profileForm.invalid">
<i class="material-icons">check</i> Add
</button>
</div>
</form>
</ng-template>