Bagaimana cara menambahkan gambar latar belakang menggunakan ngStyle (angular2)?

103

Bagaimana cara menggunakan ngStyle untuk menambahkan gambar latar belakang? Kode saya tidak berfungsi:

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

<div [ngStyle]="{'background-image': url(' + photo + ')}"></div>
Ignat
sumber
mengapa Anda menggunakan tanda kurung pada atribut ngStyle?
gal
Lihat juga stackoverflow.com/questions/37076867/… tentang masalah terkait di RC.1
Günter Zöchbauer

Jawaban:

233

Saya pikir Anda bisa mencoba ini:

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

Dari membaca ngStyleekspresi Anda , saya rasa Anda melewatkan beberapa "'" ...

Thierry Templier
sumber
Diuji. Bekerja dengan RC.1. Seharusnya tidak diperlukan untuk RC.2 dan rilis yang lebih baru sesuai dengan yang mereka katakan di sini
Lucio Mollinedo
4
Saya lebih suka this.photo = `url(${photo})`; [style.background-image]='photo'.
slideshowp2
4
Ingatlah bahwa spasi di URL gambar (nama gambar) dapat menyebabkan senyap [ngStyle]dan [style.background-image]kegagalan rendering.
vulp
83

Anda juga dapat mencoba ini:

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

Todmy
sumber
3
@ redfox05 Saya rasa ngStyle adalah gula sintaksis. Perbedaan utamanya adalah ngStyle memungkinkan Anda menerapkan beberapa aturan css, tetapi [style. <css_prop>] hanya mengizinkan satu aturan. Berikutnya adalah setara: <div [ngStyle]="{ color: 'red', 'font-size': '22px' }">First</div> dan <div [style.color]="'red'" [style.font-size.px]="22">Second</div>
Todmy
Saya telah menggunakan pendekatan [style.css] ini, meskipun saya tidak bisa menggunakan [style.background-repeat], Anda tahu kenapa?
Anders Metnik
Bagaimana cara melakukan gaya bersyarat menggunakan pendekatan ini? Katakanlah jika saya ingin memeriksa apakah foto tidak null dan kemudian hanya menerapkan gaya ini?
Pankaj
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>

Lihat juga

Günter Zöchbauer
sumber
6

Sepertinya gaya Anda telah dibersihkan, untuk melewatinya coba gunakan metode bypassSecurityTrustStyle dari 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>

Uliana Pavelko
sumber
6

Gunakan sebagai gantinya

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

Gambar latar belakang saya tidak berfungsi karena URL memiliki spasi di dalamnya dan karena itu saya perlu menyandikannya ke URL.

Anda dapat memeriksa apakah ini masalah yang Anda alami dengan mencoba URL gambar lain yang tidak memiliki karakter yang perlu keluar.

Anda bisa melakukan ini ke data dalam komponen hanya menggunakan Javascripts built in encodeURI () metode.

Secara pribadi saya ingin membuat pipa untuk itu sehingga bisa digunakan dalam template.

Untuk melakukan ini, Anda dapat membuat pipa yang sangat sederhana. Sebagai contoh:

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>
Tom Benyon
sumber
0

Anda dapat menggunakan 2 metode:

Metode 1

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

Metode 2

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

Catatan: penting untuk mengapit URL dengan " char.

riofly
sumber
0

Sebagian besar gambar tidak ditampilkan karena URL Anda berisi spasi. Dalam kasus Anda, Anda hampir melakukan semuanya dengan benar. Kecuali satu hal - Anda belum menambahkan tanda kutip tunggal seperti yang Anda lakukan jika Anda menentukan gambar latar belakang di css Ie

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

Untuk melakukannya, lepas karakter kutipan dalam HTML melalui \ '

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

Solusi saya, menggunakan pernyataan if..else. Itu selalu merupakan praktik yang baik jika Anda ingin menghindari frustrasi yang tidak perlu, untuk memeriksa apakah variabel Anda ada dan disetel. Jika tidak, berikan gambar cadangan jika; Anda juga dapat menentukan beberapa properti gaya, seperti background-position: center, dll.

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

AllJs
sumber