Wie füge ich ein Hintergrundbild mit ngStyle (angle2) hinzu?


101

Wie verwende ich ngStyle, um ein Hintergrundbild hinzuzufügen? Mein Code funktioniert nicht:

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

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

Warum verwenden Sie die Klammern für das Attribut ngStyle?
gal

Siehe auch stackoverflow.com/questions/37076867/… zu einem verwandten Problem in RC.1
Günter Zöchbauer

Antworten:


226

Ich denke, Sie könnten dies versuchen:

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

Nach dem Lesen Ihres ngStyleGesichtsausdrucks haben Sie wahrscheinlich ein "'" verpasst ...


Geprüft. Arbeiten mit RC.1. Es sollte nicht für RC.2 und neuere Versionen benötigt werden, wie hier angegeben
Lucio Mollinedo

4
Ich bevorzuge this.photo = `url(${photo})`; [style.background-image]='photo'.
Slideshowp2

4
Beachten Sie, dass Leerzeichen in Bild URL (Bildname) kann ein stilles verursachen [ngStyle]und [style.background-image]Rendering - Versagen.
Vulp

83

Sie können dies auch versuchen:

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


3
@ redfox05 Ich nehme an, ngStyle ist ein syntaktischer Zucker. Der Hauptunterschied besteht darin, dass Sie mit ngStyle mehrere CSS-Regeln anwenden können, [style. <Css_prop>] jedoch nur eine. Die nächsten sind gleichwertig: <div [ngStyle]="{ color: 'red', 'font-size': '22px' }">First</div> und <div [style.color]="'red'" [style.font-size.px]="22">Second</div>
Todmy

Ich habe diesen [style.css] -Ansatz verwendet, obwohl ich [style.background-repeat] nicht zum Laufen bringen kann. Weißt du warum?
Anders Metnik

Wie mache ich bedingtes Styling mit diesem Ansatz? Angenommen, ich möchte überprüfen, ob das Foto nicht null ist, und dann nur diesen Stil anwenden.
Pankaj

24
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>

Siehe auch


6

Ihr Stil wurde anscheinend bereinigt. Um ihn zu umgehen, verwenden Sie die bypassSecurityTrustStyle-Methode von 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>


6

Verwenden Sie stattdessen

[ngStyle]="{'background-image':' url(' + instagram?.image + ')'}"

3

Mein Hintergrundbild funktionierte nicht, da die URL ein Leerzeichen enthielt und ich sie daher per URL codieren musste.

Sie können überprüfen, ob dies das Problem ist, indem Sie eine andere Bild-URL ausprobieren, die keine Zeichen enthält, die maskiert werden müssen.

Sie können dies mit den Daten in der Komponente tun, indem Sie nur in encodeURI () integrierte Javascripts verwenden. -Methode integrierten verwenden.

Persönlich wollte ich eine Pipe dafür erstellen, damit sie in der Vorlage verwendet werden kann.

Dazu können Sie eine sehr einfache Pipe erstellen. Beispielsweise:

src / app / pipes / 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

Sie können 2 Methoden verwenden:

Methode 1

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

Methode 2

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

Hinweis: Es ist wichtig, die URL mit " char " zu umgeben .


0

Meistens wird das Bild nicht angezeigt, da Ihre URL Leerzeichen enthält. In Ihrem Fall haben Sie fast alles richtig gemacht. Abgesehen von einer Sache - Sie haben keine einfachen Anführungszeichen hinzugefügt, wie Sie es tun, wenn Sie das Hintergrundbild in CSS Ie angeben

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

Um dies zu tun, maskieren Sie das Anführungszeichen in HTML über \ '

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

0

Meine Lösung mit der Anweisung if..else. Es ist immer eine gute Praxis, wenn Sie unnötige Frustrationen vermeiden möchten, um zu überprüfen, ob Ihre Variable vorhanden und festgelegt ist. Andernfalls geben Sie für den Fall ein Backup-Image an. Sie können auch mehrere Stileigenschaften wie background-position: centerusw. angeben .

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.