Як додати фонове зображення за допомогою ngStyle (angular2)?


103

Як за допомогою ngStyle додати фонове зображення? Мій код не працює:

this.photo = 'http://dl27.fotosklad.org.ua/20121020/6d0d7b1596285466e8bb06114a88c903.jpg';

<div [ngStyle]="{'background-image': url(' + photo + ')}"></div>

чому ви використовуєте дужки в атрибуті ngStyle?
gal

Дивіться також stackoverflow.com/questions/37076867/… про пов’язану проблему в RC.1
Günter Zöchbauer

Відповіді:


231

Я думаю, ви могли б спробувати це:

<div [ngStyle]="{'background-image': 'url(' + photo + ')'}"></div>

Читаючи ваше ngStyleвираз, я здогадуюсь, що ви пропустили якісь "" "...


Випробуваний. Робота з RC.1. Це не повинно бути потрібним для RC.2 та новіших версій відповідно до того, що тут
Lucio Mollinedo

4
Я віддаю перевагу this.photo = `url(${photo})`; [style.background-image]='photo'.
слайдшоу2

4
Майте на увазі, що пробіли у URL-адресі зображення (назва зображення) можуть спричинити беззвучний режим [ngStyle]і [style.background-image]помилку відображення.
vulp

83

Також ви можете спробувати це:

[style.background-image]="'url(' + photo + ')'"


3
@ redfox05 Я вважаю, що ngStyle є синтаксичним цукром. Основна відмінність полягає в тому, що ngStyle дозволяє застосувати кілька правил css, але [style. <css_prop>] дозволяє лише одне. Наступні еквівалентні: <div [ngStyle]="{ color: 'red', 'font-size': '22px' }">First</div> та <div [style.color]="'red'" [style.font-size.px]="22">Second</div>
Тодмі

Я використовував такий [style.css] підхід, хоча я не можу [style.background-повторити] працювати, ви знаєте, чому?
Андерс Метник

Як зробити умовний стиль, використовуючи такий підхід? Скажімо, якщо я хочу перевірити, чи фото не є нульовим, а потім застосувати лише цей стиль?
Панкай

25
import {BrowserModule, DomSanitizer} from '@angular/platform-browser'

  constructor(private sanitizer:DomSanitizer) {
    this.name = 'Angular!'
    this.backgroundImg = sanitizer.bypassSecurityTrustStyle('url(http://www.freephotos.se/images/photos_medium/white-flower-4.jpg)');
  }
<div [style.background-image]="backgroundImg"></div>

Дивитися також


6

Схоже, ваш стиль було дезінфіковано, щоб обійти його, спробуйте скористатися методом bypassSecurityTrustStyle від DomSanitizer.

import { Component, OnInit, Input } from '@angular/core';
import { DomSanitizer, SafeStyle } from '@angular/platform-browser';

@Component({
  selector: 'my-component',
  templateUrl: './my-component.component.html',
  styleUrls: ['./my-component.component.scss']
})

export class MyComponent implements OnInit {

  public backgroundImg: SafeStyle;
  @Input() myObject: any;

  constructor(private sanitizer: DomSanitizer) {}

  ngOnInit() {
     this.backgroundImg = this.sanitizer.bypassSecurityTrustStyle('url(' + this.myObject.ImageUrl + ')');
  }

}
<div *ngIf="backgroundImg.length > 0" [style.background-image]="backgroundImg"></div>



3

Моє фонове зображення не працювало, оскільки в URL-адресі було пробіл, і тому мені потрібно було його кодувати.

Ви можете перевірити, чи це проблема у вас, спробувавши іншу URL-адресу зображення, яка не містить символів, які потребують втечі.

Ви можете зробити це для даних компонента просто за допомогою Javascripts, вбудованого в метод encodeURI () .

Особисто я хотів створити для нього трубу, щоб її можна було використовувати в шаблоні.

Для цього можна створити дуже просту трубу. Наприклад:

src / app / pipe / encode-uri.pipe.ts

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
  name: 'encodeUri'
})
export class EncodeUriPipe implements PipeTransform {

  transform(value: any, args?: any): any {
    return encodeURI(value);
  }
}

src / app / app.module.ts

import { EncodeUriPipe } from './pipes/encode-uri.pipe';
...

@NgModule({
  imports: [
    BrowserModule,
    AppRoutingModule
    ...
  ],
  exports: [
    ...
  ],
 declarations: [
    AppComponent,
    EncodeUriPipe
 ],
 bootstrap: [ AppComponent ]
})

export class AppModule { }

src / app / app.component.ts

import {Component} from '@angular/core';

@Component({
  // tslint:disable-next-line
  selector: 'body',
  template: '<router-outlet></router-outlet>'
})
export class AppComponent {
  myUrlVariable: string;
  constructor() {
    this.myUrlVariable = 'http://myimagewith space init.com';
  }
}

src / app / app.component.html

<div [style.background-image]="'url(' + (myUrlVariable | encodeUri) + ')'" ></div>

0

Можна використовувати 2 способи:

Спосіб 1

<div [ngStyle]="{'background-image': 'url(&quot;' + photo + '&quot;)'}"></div>

Спосіб 2

<div [style.background-image]="'url(&quot;' + photo + '&quot;)'"></div>

Примітка: важливо оточити URL-адресою " char".


0

Здебільшого зображення не відображається, оскільки URL-адреса містить пробіли. У вашому випадку ви майже все зробили правильно. За винятком однієї речі - ви не додали одиничних лапок, як у вас, якщо ви вказали фонове зображення у css Ie

.bg-img {                \/          \/
    background-image: url('http://...');
}

Щоб уникнути символу quot у HTML через \ '

                                          \/                                  \/
<div [ngStyle]="{'background-image': 'url(\''+ item.color.catalogImageLink + '\')'}"></div>

0

Моє рішення, використовуючи if..else оператор. Завжди є хорошою практикою, якщо ви хочете уникнути зайвих розладів, перевірити, чи існує ваша змінна і встановлена. В іншому випадку надайте резервне зображення на випадок; Ви також можете вказати кілька властивостей стилю, наприклад background-position: centerтощо.

<div [ngStyle]="{'background-image': this.photo ? 'url(' + this.photo + ')' : 'https://placehold.it/70x70', 'background-position': 'center' }"></div>

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.