Как удалить теги сценария в index.html из компонента Angular

<script data-jsd-embedded data-base-url = "" data-key = "" type = "text/javascript" src = "js-text-sample.js"></script>

Выше приведен пример тега сценария, который находится на index.html.

Я хочу скрыть его внутри компонента Angular.

Компонент angular сначала получит конфигурацию из API. Затем он проверит, нужно ли скрывать скрипт или нет.

Сценарий представляет собой встроенный виджет, который мне нужно скрыть, если он не соответствует действительности в API конфигурации.

Как скрыть это от кода компонента?

попробуйте: <script *ngIf = "shouldHide" data-jsd-embedded data-base-url = "" data-key = "" type = "text/javascript" src = "js-text-sample.js"></ сценарий>

luke jon 17.10.2022 07:54

@luke jon мы не можем использовать ng-if внутри index.html в проекте Angular.

Anthony Cuartero 17.10.2022 08:00

Вы можете создать тег script внутри angular, если он должен быть включен. См. пример здесь: stackoverflow.com/a/46924372/11028838

Matthias Thalmann 17.10.2022 08:24

Тег скрипта не виден, так что вы подразумеваете под «скрытием» тега скрипта?

JSON Derulo 17.10.2022 08:35

Я имею в виду удалить тег сценария.

Anthony Cuartero 17.10.2022 09:28
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
5
601
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете сделать это классическим способом с помощью javascript. Когда вы получите ответ от API, запросите DOM, чтобы получить ссылку на элемент и удалить его:

const element = document.getElementById('widgetContainerId');
element.parentElement.removeChild(element);

Это удалит виджет из DOM.

Если в дальнейшем в течение жизненного цикла приложения вы захотите показать его снова, то вам следует не удалять весь элемент из DOM, а скрыть его, может быть, с помощью display: none;:

const element = document.getElementById('widgetContainerId');
element.style.display = 'none';

Всякий раз, когда вам нужно, чтобы он снова отображался, обновите свойство отображения на что-то другое, например block:

element.style.display = 'block';

это не работает. Виджет по-прежнему отображается.

Anthony Cuartero 17.10.2022 09:56

Вы должны скрыть (или удалить) сам виджет, а не элемент script.

Octavian Mărculescu 17.10.2022 10:01
Ответ принят как подходящий

Вместо того, чтобы размещать тег скрипта и беспокоиться о логике после скрытия/отображения, почему бы вам не создать тег скрипта во время выполнения на основе результата.

import { Renderer2, OnInit, Inject } from '@angular/core';
import { DOCUMENT } from '@angular/common';

class MyComponent implements OnInit {

    constructor(
        private _renderer2: Renderer2, 
        @Inject(DOCUMENT) private _document: Document
    ) { }

    public ngOnInit() {

        let script = this._renderer2.createElement('script');
        script.src='_SOURCE_HERE_'
        `;

        this._renderer2.appendChild(this._document.body, script);
    }
}

вы также можете создать метод, который может обрабатывать добавление/удаление для вас тега скрипта по идентификатору, извините, я не показал код выше

Muhammad Ahsan 17.10.2022 09:18

как добавить эти элементы в <script> при добавлении? (data-jsd-встроенная база данных-url = "" data-key = "")

Anthony Cuartero 17.10.2022 09:30

script.setAttribute('data-jsd-embedded', ''); script.setAttribute('URL-адрес базы данных', ''); script.setAttribute('ключ данных', '');

Muhammad Ahsan 17.10.2022 09:36

Я пробовал, но это не работает

Anthony Cuartero 17.10.2022 09:50

у меня это сработало, дайте мне минутку, я дам вам ссылку на stackblitz

Muhammad Ahsan 17.10.2022 09:54

проверьте здесь angular-vmjbxk.stackblitz.io. Осмотрите элемент, который вы напишете в голове

Muhammad Ahsan 17.10.2022 09:58

URL редактора stackblitz.com/edit/angular-vmjbxk?file=src/app/…

Muhammad Ahsan 17.10.2022 09:58

@AnthonyCuartero, дайте мне знать, если вы его получили, и, пожалуйста, примите ответ, это поможет людям с похожими вопросами

Muhammad Ahsan 17.10.2022 10:39

Да, это работает. Спасибо. Я вижу это в html. Но виджет не загрузился. Я не знаю, почему. Я просто покопаюсь в этом.

Anthony Cuartero 17.10.2022 16:40

Хорошо @AnthonyCuartero, дайте мне знать, если нужно

Muhammad Ahsan 17.10.2022 21:22

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