Ionic *ngIf - Проверить наличие глобальных переменных

Могу ли *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?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
32
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете выставить внедренную службу как общедоступную:

public debugService: DebugService

И используйте его в своем шаблоне. Хотя мне это не очень нравится, но для простого показа это сработало бы.

Ты не единственный, кому это не нравится ^^ это определенно запах кода.

Will Alexander 17.03.2022 18:10

Я знаю, но иногда мы начинаем с плохих решений, но они работают, а потом улучшаем :)

Alain Boudard 17.03.2022 18:12

Конечно, но когда OP уже использует передовой опыт (по крайней мере, в отношении простой архитектуры), переход на переменные общедоступных служб кажется шагом назад, а не улучшением ^^

Will Alexander 17.03.2022 18:14

Правильно, вы действительно нашли правильные слова в своем ответе! Ваше здоровье :)

Alain Boudard 17.03.2022 18:19

Забавная идея, но да, я думаю, что не стоило бы выставлять переменные^^ Значит, иначе это было бы невозможно?

Ljonja 17.03.2022 18:45

Единственный способ, которым компонент получает доступ к сервису, — это внедрить его, гарантируя, что внедрение зависимостей работает правильно. Сервисы на самом деле не являются глобальные переменные, как вы выразились: они не просто «доступны из любого места». Вам нужно использовать DI.

Технически вы можете внедрить сервис как переменную public, а не private, и получить доступ к его элементам непосредственно из шаблона. Однако обычно это считается запахом кода.

Ответ принят как подходящий

Есть два способа:

  1. Сделать экземпляр службы общедоступным

    constructor(
        public debugService: DebugService,
    ) {}
    
  2. Используйте метод (рекомендуемый способ).

    public isDebugActive() {
        return this.debugService.debugActive;
    }
    
    <div *ngIf = "isDebugActive()"></div>
    

Спасибо, метод 2 кажется более элегантным, чем мой способ создания новой переменной, но при этом не раскрывая мой debugService как общедоступный

Ljonja 18.03.2022 23:06

Другие вопросы по теме