Причина, по которой вы не можете найти его в компоненте, заключается в том, что вы не создали его в компоненте. Если вы посмотрите на эту строку в конструкторе:
this.appElementRef = new ElementRef(<Element>document.getElementsByTagName('body').item(0))
Вы создаете его в документе непосредственно в элементе <body>
. Если вы ищете это в своей спецификации, вы найдете его там. Я создал STACKBLITZ , чтобы показать вам, что я имею в виду. Вот спецификация этого стекаблица:
it('Deve ter uma div principal', () => {
const btnClick = fixture.nativeElement.querySelector('button');
console.log(btnClick);
btnClick.click();
fixture.detectChanges();
const appElementRef = new ElementRef(<Element>document.getElementsByTagName('body').item(0));
const el = appElementRef.nativeElement.querySelector('.lock-content');
expect(el).toBeTruthy();
});
Добавим немного больше уточнений:
Если вы console.log(appElementRef)
заметите, что его tagName равно body
, и обратите внимание на содержимое его nativeElement.innerHTML Вот то, что выглядело бы как "prettyfied":
<body>
<div class="jasmine_html-reporter">
<div class="jasmine-banner"><a class="jasmine-title" href="http://jasmine.github.io/" target="_blank"></a><span
class="jasmine-version">3.3.0</span></div>
<ul class="jasmine-symbol-summary"></ul>
<div class="jasmine-alert"></div>
<div class="jasmine-results">
<div class="jasmine-failures"></div>
</div>
</div>
<div id="nprogress" style="transition: none 0s ease 0s; opacity: 1;">
<div class="bar" role="bar" style="transform: translate3d(0%, 0px, 0px); transition: all 200ms ease 0s;">
<div class="peg"></div>
</div>
</div>
<div id="root0" ng-version="7.0.1">
<button></button>
</div>
<div class="lock-content">
<div class="spinner">
<i></i>
<i></i>
<i></i>
</div>
<span>Teste BackDrop aesdas</span>
</div>
</body>
Обратите внимание, как кнопка была создана в div с id="root0"
? Тем не менее, div с class="lock-content"
был создан сразу после корневого элемента <body>
, и поэтому не входит в div компонента.
На самом деле, вы можете очень четко это увидеть, когда вы console.log(fixture.nativeElement)
и видите, что tagName - это "div", его innerHTML - <button></button>
, и у него есть два атрибута: id: "root0"
и ng-version: "7.0.1"
. Сложите все это вместе, и это будет выглядеть так:
<div id="root0" ng-version="7.0.1">
<button></button>
</div>
Таким образом, вы можете ясно видеть, что вы не можете найти созданный вами div в компоненте, потому что вы создали его вне компонента.
Надеюсь, это поможет.