Могу ли *ngIf проверять только локальные переменные страницы или я могу проверять глобальные переменные?
Я хочу сделать следующее:
домашняя.страница.html
<div *ngIf = "debugService.debugActive"></div>
отладка.service.ts
debugActive: boolean = true;
contructor() {}
...
Но прямо сейчас мне нужно сначала инициализировать переменную на моем home.page.ts, чтобы использовать ее в html:
домашняя.страница.ts
import { DebugService } from 'src/app/services/debug.service';
localDebugActive: boolean = false;
constructor(
private debugService: DebugService,
) {}
ngOnInit() {
this.localDebugActive = this.debugService.debugActive;
}
домашняя.страница.html
<div *ngIf = "localDebugActive"></div>
Это означает дополнительный шаг и заполнение всех моих страниц локальными переменными. Возможно ли это без повторного объявления и использования непосредственно в HTML?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете выставить внедренную службу как общедоступную:
public debugService: DebugService
И используйте его в своем шаблоне. Хотя мне это не очень нравится, но для простого показа это сработало бы.
Я знаю, но иногда мы начинаем с плохих решений, но они работают, а потом улучшаем :)
Конечно, но когда OP уже использует передовой опыт (по крайней мере, в отношении простой архитектуры), переход на переменные общедоступных служб кажется шагом назад, а не улучшением ^^
Правильно, вы действительно нашли правильные слова в своем ответе! Ваше здоровье :)
Забавная идея, но да, я думаю, что не стоило бы выставлять переменные^^ Значит, иначе это было бы невозможно?
Единственный способ, которым компонент получает доступ к сервису, — это внедрить его, гарантируя, что внедрение зависимостей работает правильно. Сервисы на самом деле не являются глобальные переменные, как вы выразились: они не просто «доступны из любого места». Вам нужно использовать DI.
Технически вы можете внедрить сервис как переменную public, а не private, и получить доступ к его элементам непосредственно из шаблона. Однако обычно это считается запахом кода.
Есть два способа:
Сделать экземпляр службы общедоступным
constructor(
public debugService: DebugService,
) {}
Используйте метод (рекомендуемый способ).
public isDebugActive() {
return this.debugService.debugActive;
}
<div *ngIf = "isDebugActive()"></div>
Спасибо, метод 2 кажется более элегантным, чем мой способ создания новой переменной, но при этом не раскрывая мой debugService как общедоступный
Ты не единственный, кому это не нравится ^^ это определенно запах кода.