Angular directive css class selector is not working when class added by ngClass directive.
This is my code example and I will also add playground at link
@Directive({
selector: '.test',
standalone: true,
})
export class TestDirective {
constructor(public elementRef: ElementRef) {}
}
@Component({
selector: 'app-root',
standalone: true,
imports: [CommonModule, TestDirective],
styles: `
.prova {
padding:30px;
border: 5px solid black
}
.test {
padding:30px;
border: 5px solid red
}
`,
template: `
<button style="padding:5px; position:sticky; top:0" (click)="testScroll()"> test scroll</button>
<div class="prova">
ciao
</div>
<div class="prova">
ciao
</div>
<div class="prova">
ciao
</div>
<div class="prova">
ciao
</div>
<div class="prova">
ciao
</div>
<div class="prova">
ciao
</div>
<div class="prova">
ciao
</div>
<div class="prova">
ciao
</div>
<div class="prova">
ciao
</div>
<div class="prova">
ciao
</div>
<div class="prova">
ciao
</div>
<div class="prova">
ciao
</div>
<div class="prova">
ciao
</div>
<div class="prova">
ciao
</div>
<div class="prova">
ciao
</div>
<div class="prova">
ciao
</div>
<div class="prova">
ciao
</div>
<div class="prova">
ciao
</div>
<div class="prova">
ciao
</div>
<div class="prova">
ciao
</div>
<div [ngClass]="{'test':true}">
test
</div>
<div class="prova">
ciao
</div>
<div class="prova">
ciao
</div>
<div class="prova">
ciao
</div>
<div class="prova">
ciao
</div>
<div class="prova">
ciao
</div>
<div class="prova">
ciao
</div>
<div class="prova">
ciao
</div>
<div class="prova">
ciao
</div>
<div class="prova">
ciao
</div>
<div class="prova">
ciao
</div>
Hello world!
`,
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class PlaygroundComponent implements OnInit {
test = viewChildren(TestDirective, { read: ElementRef });
ngOnInit(): void {
console.log(this.test());
}
testScroll() {
this.test()[0].nativeElement.scrollIntoView({ behavior: 'smooth' });
}
}
I already tried to use @ViewChildren and change detection strategy onPush, but nothing works. My goal is to achieve the behavior to scroll to an element when it has a specific class added dynamically.