Посоветуйте пожалуйста способ(ы), при помощи которого можно заставить шаблон обновить значения отображаемых переменных.
Есть простейший сайт с двумя страничками и модулем роутинга. Он состоит из главного компонента и двух дочерних. В главном компоненте я сделал переключатель языка. этот переключатель находится вне
<router-outlet></router-outlet>
, а потому доступен на каждой из двух внутренних страничек.
Переключатель языка представляет из себя mat-slide-toggle из стандартной библиотеки материал. Переключатель работает следующим образом:
tpl:
<mat-slide-toggle class="toggler-lang" (click)="toggleLang()"></mat-slide-toggle>
component:
export class AppComponent implements OnInit {
private lang: boolean = false;
ngOnInit() {
localStorage.removeItem('isEnLang');
};
private toggleLang() {
this.lang = !this.lang;
if(this.lang == true) {
localStorage.isEnLang = 'true';
} else {
localStorage.removeItem('isEnLang');
}
};
}
то есть если выбран язык английский, то в локалсторадже есть значение, если выбран язык русский, то в локалстородже нет значения.
Проблема в том, что находясь на страничке "Программа", я при помощи переключателя языка меняю язык, но после этого изменения не отображаются. Чтобы изменения отобразились необходимо уйти со странички "Программа" и снова вернуться на неё. Эту последовательность действий можно воспроизвести на живом примере
Вот ссылка на gitHub
Вот так в Компоненте, который соответствуют страничке "Программа" происходит проверка языка:
private isEnLang: boolean;
constructor() {
this.isEnLang = localStorage.isEnLang ? true : false;
console.log('this.isEnLang', this.isEnLang);
};
Так происходит вывод в шаблоне Программы:
<div class="title" *ngIf="line.title">{{ isEnLang ? line?.title_en.trim() : line?.title.trim() }}</div>
Вам следует делать проверку не в конструкторе, а в одном из component lifecycle hooks.
Don't fetch data in a component constructor. You shouldn't worry that a new component will try to contact a remote server when created under test or before you decide to display it. Constructors should do no more than set the initial local variables to simple values.
constructor
следует использовать только для создания/инициализации полей класса, например:
constructor(private isEnLang: boolean) {};
ngDoCheck() {
this.isEnLang = localStorage.isEnLang ? true : false;
console.log('this.isEnLang', this.isEnLang);
}
Чтобы руками запустить дайджест цикл тебе необходим класс ApplicationRef
https://angular.io/api/core/ApplicationRef , который имеет метод tick()
constructor(private appRef: ApplicationRef)
someMethod() {
this.appRef.tick(); // start digest cycle
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Не работает диаграмма при передаче данных из формы, пожалуйста, подскажите в чем ошибкаhttps://jsbin
Есть сущности категории(category), подкатегории(subcategory), товары(product)
ЗдравствуйтеЕсть код для формирования сообщения на e-mail с помощью smarty v2