Angular [innerHtml]: как отображать дополнительные элементы внутри элемента с помощью директивы [innerHtml]

Кажется, что элемент с директивой [innerHtml] просто добавляет объявленную строку html внутри этого элемента, и ничего более;

через этот stackblitz я пытался добавить что-то внутри такого элемента, но безуспешно;

<div [innerHTML] = "safeHtml(item.isi)"><p>new word - will not show</p></div>

Есть ли способ добавить еще немного HTML внутри элемента с помощью директивы [innerHtml]? Другими словами, как я могу заставить работать stackblitz в примере?

обновил свой рабочий ответ, проверьте рабочий код: stackblitz.com/edit/…, то же самое обновлено в моем ответе

Pranay Rana 07.06.2018 12:12

пожалуйста, посмотрите обновленные и дайте мне знать, если есть какие-либо проблемы

Pranay Rana 07.06.2018 12:31
Поведение ключевого слова "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
2
1 752
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

почему вы используете [innerHTML], если ваш item.isi не является элементом html; мы используем innerHTML для рендеринга html-результата; например, если ваш item.isi - <p>My name</p>; если это не элемент html, без использования innerHTML, вы можете просто использовать {{item.isi}} внутри своего div, чтобы вы могли также отображать другие элементы html

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

вы можете попробовать использовать ElementRef, если вы хотите добавить элемент, который не хочет заменять полный html,

html

<div #Container>
    add here 
 </div> 

ts файл

export class AppComponent implements AfterViewInit  {
  @ViewChild('Container') container: ElementRef ;

  content = [
   {judul: "Judul 1", isi:"<div id='title_1'>Isinya</div>"},
   {judul: "Judul 2", isi:"<div id='title_2'>pranay</div>"},
  ];

  ngAfterViewInit() { 
   this.content.forEach( (item,index) =>{
      this.container.nativeElement.insertAdjacentHTML('beforeend', `<div id = "title${index}">${item.judul}</div>`);
this.container.nativeElement.insertAdjacentHTML('beforeend', `${item.isi}`);

   });
}

однако elementref не рекомендуется.

вывод вышеуказанного кода

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

Найти: Рабочая демонстрация


Вместо использования функции в вашем компоненте (она не работает как ваш html-шаблон, пытающийся передать html в ваш файл typscript), вы должны создать канал, как показано ниже

html.pipe.ts

import { Component, Pipe, PipeTransform } from '@angular/core';
import { DomSanitizer } from '@angular/platform-browser';

@Pipe({
    name: 'html'
})
export class HtmlPipe implements PipeTransform {
    constructor(private sanitized: DomSanitizer) {}
    transform(value) {
        return this.sanitized.bypassSecurityTrustHtml(value);
    }
}

и используйте это как

html

<div *ngFor = "let item of content">
 <h3 [innerHTML] = "item.judul | html ">add</h3>
 <div [innerHTML] = "item.isi | html "><p>new word</p></div>
</div>

Найти: Рабочая демонстрация

Меня интересует, как вы также можете применить стили к html в директиве? стиль шрифта css в настоящее время не применяется.

Danoram 07.06.2018 12:32

@Danoram - не понимая, можете ли вы предоставить stackbiz, потому что я не использую директивный подход,

Pranay Rana 07.06.2018 12:39

Я имел в виду директиву атрибута [innerHTML]. Я нашел ответ в другом вопросе о переполнении стека. dw

Danoram 07.06.2018 12:52

@Danoram - [innerHTML]. не является директивой, OP хочет добавить html в данный элемент, не хочу заменять, поэтому я дал обновленное решение Element ref ...

Pranay Rana 07.06.2018 12:54

* Привязки свойств. не имеет значения, я нашел ответ на это плюс директивы и т. д. спасибо

Danoram 07.06.2018 13:10

@Danoram - ты ОП, у тебя две учетные записи? , и предоставьте ссылку на ответ

Pranay Rana 07.06.2018 13:24

Я не понимаю, о чем вы сейчас говорите. это рассказало мне, что мне нужно знать, чтобы получить стили с использованием привязки innerHTML Я продолжаю жить своей жизнью. Благодарность

Danoram 07.06.2018 13:39

@ Danoram - вы не должны делать этот encapsulation: ViewEncapsulation.None,, лучше используйте senetizer, как я дал в моем коде трубы, и я спрашиваю, вы тот человек, который задал вышеупомянутый вопрос

Pranay Rana 07.06.2018 13:41

Нет я не. Я буду иметь это в виду. Я ценю все твои ответы здесь.

Danoram 07.06.2018 13:53

Насколько я понимаю ваш вопрос, использование внутреннего html заменяет внутренний html. Поэтому старое значение заменяется значением из вашего объекта.

Я понимаю, что вы следуете этому подходу, поскольку хотите отобразить значение из объекта.

Так что лучше использовать трубы. Может быть. Просто проверьте этот ответ. Если это поможет. кликните сюда

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