Renderer2 通过 selectRootElement 选择元素使其内容消失
Renderer2 selecting element by selectRootElement make it's content disappear
尝试使用 Renderer2 创建选项卡组件时 select 选项卡元素,并尝试添加一些 css class 来更改颜色,例如 select编辑当前未 select 的选项卡,HTML 元素从 DOM:
中完全消失
这是选项卡 html 模板:
<div class="detail-nav">
<div class="nav-item-1">
<a routerLink="main-config" routerLinkActive="active" (click)=actionItem1()>
<span>Main config</span>
</a>
</div>
<div class="nav-item-2">
<a routerLink="sub-config" routerLinkActive="active" (click)=actionItem2()>
<span>Handling data</span>
</a>
</div>
<div class="nav-item-3">
<a routerLink="editing" routerLinkActive="active" (click)=actionItem3()>
<span>Editing</span>
</a>
</div>
<div>
我添加了一些 css 以使锚标签与父标签具有相同的高度 div,
所以当使用 Renderer2 时:
...
constructor(private route: ActivatedRoute, private renderer: Renderer2) {}
...
let elm = this.renderer.selectRootElement(".nav-item a");
this.renderer.addClass(elm, 'nav-item');
CSS:
.nav-item {
background-color: LightBlue;
}
然后 achor 标签在执行时从 DOM 中完全消失:
this.renderer.addClass(elm, 'nav-item');
这有什么原因吗?
可能是 selectRootElement 的工作方式问题?
有人对此有想法吗?
我已经在 devtools 中通过悬停打印的 elm 变量验证了 elm 在调试模式下引用了正确的元素。
你想实现的事情可以用@viewChild
来完成
import { Component, ElementRef, ViewChild, Renderer2 } from '@angular/core';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
@ViewChild('test') test: ElementRef;
constructor(private renderer: Renderer2) {}
addActiveClass() {
this.renderer.addClass(this.test.nativeElement, 'active');
}
removeActiveClass() {
this.renderer.removeClass(this.test.nativeElement, 'active');
}
}
<button class="btn btn-primary" (click)="addActiveClass()">Aggiungi classe</button>
<button class="btn btn-danger" (click)="removeActiveClass()">Rimuovi classe</button>
<p #test>Here it is </p>
这里是link到codesandbox
这是 selectRootElement()
的默认行为。 See Documentation
要保留内容,请传递第二个(布尔值)参数,如下所示:
let elm = this.renderer.selectRootElement(".nav-item a", true);
尝试使用 Renderer2 创建选项卡组件时 select 选项卡元素,并尝试添加一些 css class 来更改颜色,例如 select编辑当前未 select 的选项卡,HTML 元素从 DOM:
中完全消失这是选项卡 html 模板:
<div class="detail-nav">
<div class="nav-item-1">
<a routerLink="main-config" routerLinkActive="active" (click)=actionItem1()>
<span>Main config</span>
</a>
</div>
<div class="nav-item-2">
<a routerLink="sub-config" routerLinkActive="active" (click)=actionItem2()>
<span>Handling data</span>
</a>
</div>
<div class="nav-item-3">
<a routerLink="editing" routerLinkActive="active" (click)=actionItem3()>
<span>Editing</span>
</a>
</div>
<div>
我添加了一些 css 以使锚标签与父标签具有相同的高度 div,
所以当使用 Renderer2 时:
...
constructor(private route: ActivatedRoute, private renderer: Renderer2) {}
...
let elm = this.renderer.selectRootElement(".nav-item a");
this.renderer.addClass(elm, 'nav-item');
CSS:
.nav-item {
background-color: LightBlue;
}
然后 achor 标签在执行时从 DOM 中完全消失:
this.renderer.addClass(elm, 'nav-item');
这有什么原因吗?
可能是 selectRootElement 的工作方式问题?
有人对此有想法吗?
我已经在 devtools 中通过悬停打印的 elm 变量验证了 elm 在调试模式下引用了正确的元素。
你想实现的事情可以用@viewChild
import { Component, ElementRef, ViewChild, Renderer2 } from '@angular/core';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
@ViewChild('test') test: ElementRef;
constructor(private renderer: Renderer2) {}
addActiveClass() {
this.renderer.addClass(this.test.nativeElement, 'active');
}
removeActiveClass() {
this.renderer.removeClass(this.test.nativeElement, 'active');
}
}
<button class="btn btn-primary" (click)="addActiveClass()">Aggiungi classe</button>
<button class="btn btn-danger" (click)="removeActiveClass()">Rimuovi classe</button>
<p #test>Here it is </p>
这里是link到codesandbox
这是 selectRootElement()
的默认行为。 See Documentation
要保留内容,请传递第二个(布尔值)参数,如下所示:
let elm = this.renderer.selectRootElement(".nav-item a", true);