Angular 4 добавление изображения перед каждой новой строкой с использованием рендерера
Я пытаюсь добавить изображение перед каждой новой строкой, поэтому я могу добиться этого
Apple
Ball
Cat
Dog
но я хочу добавить изображение раньше в каждой новой строке
(img) Apple
(img) Ball
(img) Cat
(img) Dog
Код
this.tooltipTitle = "Apple,Ball,Cat,Dog,Elephant"
create() {
this.tooltip = this.renderer.createElement('div');
this.tooltipTitle.split(',').forEach((text) => {
this.renderer.appendChild(this.tooltip, this.renderer.createText(text));
this.renderer.appendChild(this.tooltip, this.renderer.createElement('br'));
this.renderer.appendChild(document.body, this.tooltip);
});
}
this.renderer.addClass(this.tooltip,'classA')
.classA{
positon:absolute;
max-width: 150px;
font-size: 14px;
color: black;
padding: 3px 8px;
background: grey;
border-radius: 4px;
z-index: 100;
opacity: 0;
}
Таким образом, addClass добавляет стили ко всей всплывающей подсказке. Это хорошо, и работаю, и я пытаюсь добавить изображение в начале новой строки.
редактировать
После многих попыток я могу добавить изображение "но", оно только добавляется к последнему значению, а не к предыдущим значениям (в то время как я хочу добавить изображение в каждой новой строке), любая помощь будет высоко оценена, пожалуйста, руководство мне
this.tooltip = this.renderer.createElement('div');
this.imgforres = this.renderer.createElement('img');
this.imgsrc =
this.renderer.setAttribute(this.imgforres,"src",
"assets/images/restriction.png")
this.tooltipTitle.split(',').forEach((text) => {
this.renderer.appendChild(this.tooltip,this.imgforres);
this.renderer.appendChild(this.tooltip, this.renderer.createText(text));
this.renderer.appendChild(this.tooltip, this.renderer.createElement('br'));
this.renderer.appendChild(document.body, this.tooltip);
});
Самый последний
Теперь я добился того, чтобы изображение получалось перед каждой новой строкой текста. Спасибо Юрию за его ответ. Последний недостаток: если текст длинный, он наверняка заканчивается, но отступ не совпадает с указанным выше текстом строки, он начинается под изображением.
<img> Apple
<img> Ball
<img> So this a long text
and it starts from below
the image
<img> Cat
ожидаемый
<img> Apple
<img> Ball
<img> So this a long text
and it starts from
below the image
<img> Cat
Я пробовал разбивать слова, оправдать, это не помогает, возможно, мне придется встроить этот текст в теги div или p, а затем дать им стиль. Пожалуйста, предложите.
2 ответа
this.tooltip = this.renderer.createElement('div');
this.tooltipTitle.split(',').forEach((text) => {
this.renderer.appendChild(this.tooltip, this.renderer.createText(text));
this.renderer.appendChild(this.tooltip, this.renderer.createElement('br'));
var img2 = document.createElement('img'); // Use DOM HTMLImageElement
img2.src = 'image2.jpg';
img2.alt = 'alt text';
this.renderer.appendChild(this.tooltip,img2);
this.renderer.appendChild(this.tooltip, this.renderer.createElement('br'));
this.renderer.appendChild(document.body, this.tooltip);
});
Вы можете попробовать что-то вроде этого -
create(){
this.tooltip = this.renderer.createElement('div');
this.tooltipTitle.split(',').forEach((text) => {
let container = this.renderer.createElement('div');
let img = this.renderer.createElement('img');
this.renderer.setAttribute(img, "src", "assets/images/restriction.png");
this.renderer.appendChild(container, img);
let textSpan = this.renderer.createElement('span');
this.renderer.appendChild(textSpan, this.renderer.createText(text));
this.renderer.appendChild(container, textSpan);
this.renderer.appendChild(this.tooltip, container);
});
this.renderer.appendChild(document.body, this.tooltip);
}
В html я сохранил встроенный CSS, который вы можете иметь в отдельном файле, и загрузите его, вызвав this.renderer.addClass()
<style>
span {
margin-left: 10px;
display:inline-flex;
width:150px;
word-wrap:break-word;
}
</style>
Вот моя подсказка для теста Titles -
tooltipTitle = "Яблоко, Мяч, Кошка, Собака, Слон Слон Слон Слон Слон Слон Слон Слон Слон";
И вот выходной скриншот