У меня есть класс компонента Angular, и внутри метода openModal()
у меня нет доступа к свойству @ViewChild content
, но, как это ни странно, и, поскольку static:true
, такая проблема не возникает даже внутри ngOnInit()
и ngAfterViewInit()
. Я сделал домашнее задание, поэтому, если я помещаю строку this.modalService.open(this.content)
внутри этих обратных вызовов, все работает отлично, но если строка в openModal()
, то модальное окно открывается без содержимого (конечно, я). Я уже внёс значительный вклад в изменение климата, погугляя его:
import {AfterViewInit, Component, OnInit, TemplateRef, ViewChild} from '@angular/core';
import {NgbModalConfig, NgbModal} from '@ng-bootstrap/ng-bootstrap';
@Component({
selector: 'app-modal-auto-shown',
templateUrl: './modal.component.html',
providers: [NgbModalConfig, NgbModal]
})
export class ModalComponent implements OnInit, AfterViewInit {
@ViewChild('content', {static: true}) private content: any;
private test = 'test_string';
constructor(config: NgbModalConfig, private modalService: NgbModal) {
config.backdrop = 'static';
config.keyboard = false;
}
ngOnInit(): void {
console.log('oninit this:', this);
console.log('oninit this.test:', this.test);
console.log('oninit this.content:', this.content);
}
ngAfterViewInit() {
console.log('afterviewinit this:', this);
console.log('afterviewinit this.test:', this.test);
console.log('afterviewinit this.content:', this.content);
}
openModal(that = this) {
console.log('openmodal this:', this);
console.log('openmodal this.test:', this.test);
console.log('openmodal this.content:', this.content);
console.log('openmodal this:', that);
console.log('openmodal that.test:', that.test);
console.log('openmodal that.content:', that.content);
console.log('openmodal that === this:', that === this);
this.modalService.open(this.content);
that.modalService.open(that.content);
}
}
Я вывожу сюда консоль:
oninit this: ModalComponent {modalService: NgbModal, test: "test_string", content: TemplateRef_}
oninit this.test: test_string
oninit this.content: TemplateRef_ {_parentView: {…}, _def: {…}}
afterviewinit this: ModalComponent {modalService: NgbModal, test: "test_string", content: TemplateRef_}
afterviewinit this.test: test_string
afterviewinit this.content: TemplateRef_ {_parentView: {…}, _def: {…}}
openmodal this: ModalComponent {modalService: NgbModal, test: "test_string"}
openmodal this.test: test_string
openmodal this.content: undefined
openmodal this: ModalComponent {modalService: NgbModal, test: "test_string"}
openmodal that.test: test_string
openmodal that.content: undefined
openmodal that === this: true
свойство test
просто живет счастливо, оно доступно из Однако во всех методах свойства @ChildView нет, и это не связано с контекстной переменной this
(??). Какой демон здесь, под капотом?