NgStyle (angular2) kullanarak arka plan resmi nasıl eklenir?


105

Arka plan görüntüsü eklemek için ngStyle nasıl kullanılır? Kodum çalışmıyor:

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

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

ngStyle özniteliğinde neden parantez kullanıyorsunuz?
gal

RC.1'deki ilgili bir sorun için stackoverflow.com/questions/37076867/… sayfasına da bakın
Günter Zöchbauer

Yanıtlar:


235

Sanırım şunu deneyebilirsin:

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

İfadeni okurken ngStyle, sanırım bazı "" "kaçırdın ...


Test edildi. RC.1 ile çalışmak. Dediklerini O RC.2 ve uygun yeni sürümler için gerekli should't burada
Lucio Mollinedo

4
Tercih ederim this.photo = `url(${photo})`; [style.background-image]='photo'.
slideshowp2

4
Resim URL'sindeki (resim adı) boşlukların sessizliğe [ngStyle]ve [style.background-image]işleme hatasına neden olabileceğini unutmayın.
vulp

83

Ayrıca şunu deneyebilirsiniz:

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


3
@ redfox05 Sanırım ngStyle sözdizimsel bir şeker. Temel fark, ngStyle'ın birkaç css kuralı uygulamanıza izin vermesidir, ancak [style. <css_prop>] yalnızca birine izin verir. Sıradaki eşdeğer: <div [ngStyle]="{ color: 'red', 'font-size': '22px' }">First</div> ve <div [style.color]="'red'" [style.font-size.px]="22">Second</div>
Todmy

Bu [style.css] yaklaşımını kullandım, ancak [style.background-tekrar] 'ı çalıştıramıyorum, nedenini biliyor musunuz?
Anders Metnik

Bu yaklaşımı kullanarak koşullu stil nasıl yapılır? Diyelim ki fotoğrafın boş olup olmadığını kontrol etmek ve sonra sadece bu stili uygulamak istiyorsam?
Pankaj

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

Ayrıca bakınız


6

Tarzınız sanite edilmiş gibi görünüyor, onu atlamak için DomSanitizer'dan bypassSecurityTrustStyle yöntemini kullanmayı deneyin.

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

Bunun yerine kullanın

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

3

Arka plan resmim çalışmıyordu çünkü URL'de bir boşluk vardı ve bu yüzden onu URL olarak kodlamam gerekiyordu.

Kaçması gereken karakterlere sahip olmayan farklı bir resim URL'sini deneyerek sorunun bu olup olmadığını kontrol edebilirsiniz.

Bunu yalnızca encodeURI () yönteminde yerleşik Javascripts kullanarak bileşendeki verilere yapabilirsiniz .

Şahsen ben şablonda kullanılabilmesi için bir boru oluşturmak istedim.

Bunu yapmak için çok basit bir boru oluşturabilirsiniz. Örneğin:

src / app / borular / 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 yöntem kullanabilirsiniz:

Yöntem 1

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

Yöntem 2

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

Not: URL'yi " karakter " ile çevrelemek önemlidir .


0

Çoğunlukla resim, URL’niz boşluk içerdiğinden görüntülenmez. Senin durumunda neredeyse her şeyi doğru yaptın. Bir şey dışında - css Ie'de arka plan görüntüsü belirtirseniz yaptığınız gibi tek tırnak eklemediniz

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

Bunu yapmak için HTML'deki tırnak karakterinden \ 'yoluyla kaçın

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

0

Çözümüm, if..else ifadesini kullanarak. Gereksiz hayal kırıklıklarından kaçınmak istiyorsanız, değişkeninizin var olduğunu ve ayarlandığını kontrol etmek her zaman iyi bir uygulamadır. Aksi takdirde, durumda bir yedek imaj sağlayın; Ayrıca background-position: center, vb. Gibi birden çok stil özelliği de belirtebilirsiniz .

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.