У меня есть несколько динамических таблиц стилей, которые я загружаю, основываясь на каком-то состоянии моего приложения Angular (подумайте над темой для разных пользователей).
Я только недавно портировал этот код на Angular 6 (из AngularJS), и мне потребовалосьнесколько дней, чтобы понять, что мои страницы мерцают, когда я нажимаю на флажок или даже раскрываю / сворачиваю регион с помощью кнопки.
Я немного покопался и обнаружил, что мой стиль, похоже, перезагружаетсяпричина.
Вы можете увидеть простой StackBlitz
Суть кода:
// app.component.ts
//...
style: 'a' | 'b';
constructor(private sanitizer: DomSanitizer){}
getStyleUrl() {
return this.sanitizer.bypassSecurityTrustResourceUrl(`assets/${this.style || 'a'}.css`);
}
doSomething() {
console.log(`done!`);
}
HTML:
// app.component.html
<link rel="stylesheet" [href]="getStyleUrl()">
...
<a type="button" (click)="style = 'a'">A</a><br>
<a type="button" (click)="style = 'b'">B</a><br>
<a type="button" (click)="doSomething()">B</a><br>
Ниже вы можете видеть, что каждый раз, когда я нажимаю кнопку no-op
, которая не меняет URL-адрес стиля, он по-прежнему перезагружает стиль.

bypassSecurityTrustResourceUrl()
возвращает разные URL при каждом вызове?так обнаружение изменений заставляет его перезагружаться?Как еще я могу загрузить этот стиль динамически?