Стиль не будет применяться к угловому компоненту, введенному в iframe

У меня есть iframe, в который я хочу добавить свой собственный угловой компонент, но я не могу применить какой-либо стиль к компоненту в iframe.

При загрузке iframe я добавляю компонент через js:

    let component= document.getElementById('componentId');
    let divInIframe= iframeWindow.document.getElementById('divInIframeId');
    divInIframe.appendChild(component);

Собственный стиль компонентов не применяется, поэтому я попытался добавить его вручную в css в собственный css-файл iFrames. Также пытался добавить стиль через js после загрузки iframe::

let cssLink = document.createElement("link");
    cssLink.href = "../../assets/component.css";
    cssLink.rel = "stylesheet";
    cssLink.type = "text/css";
    iframDoc.head.appendChild(cssLink);

Стиль по-прежнему не применяется к компоненту.

Пробовал ViewEncapsulation.None и т. д., но ничего не помогает. Единственный способ заставить его работать — использовать encapsulation:ViewEncapsulation.ShadowDom, но это не поддерживается в IE11.

Кто-нибудь понял, как я могу это решить?

Как именно вы планируете добавить его без начальной загрузки приложения?

Lucho 19.01.2019 16:05

Я предполагаю, что у вас есть цель, но почему только один компонент с angular в этом iframe, а не собственный веб-компонент?

Lucho 19.01.2019 16:15

@Lucho У меня есть веб-сайт, созданный в angular, который использует библиотеку, которая передает карту в iframe. Я хочу добавить свои собственные кнопки и прочее на эту карту. Я не могу просто поместить их «поверх» iframe с абсолютной позицией из-за проблем, связанных с z-index.

Per Nilsson 20.01.2019 13:35

Попался, тогда сделайте это более «чистым» способом. Установите новое приложение angular только с этим компонентом и загрузите его в iframe по его URL-адресу, как вы делаете это с обычным независимым приложением ng. Это вариант для вас?

Lucho 20.01.2019 14:18
Поведение ключевого слова "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) для оценки ваших знаний,...
3
4
966
2

Ответы 2

Вы можете сделать следующее:

selector: 'app-name',
templateUrl: './component_name.component.html',
styleUrls: ['./component_name.component.css']

Не могли бы вы указать причину для этого и почему это поможет

Per Nilsson 20.01.2019 13:18

Добавьте папку с ресурсами в angular.json.

"projects":{
   "AppName":{
      ...
      "assets":[
        "src/assets"
      ]
      ...
    }
 }

затем используйте cssLink.href = "assets/component.css";

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