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에 관련된 문제에 대해
귄터 Zöchbauer에게

답변:


231

나는 당신이 이것을 시도 할 수 있다고 생각합니다.

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

ngStyle표현을 읽어 보니 " '"를 놓친 것 같네요 ...


테스트되었습니다. RC.1 작업. 그들이 말하는 그것은 RC.2과에 따라 새로운 버전을 위해 필요한 should't 여기
루시오 Mollinedo에게

4
나는 선호한다 this.photo = `url(${photo})`; [style.background-image]='photo'.
slideshowp2

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

이 [style.css] 접근 방식을 사용했지만 [style.background-repeat]가 작동하도록 할 수는 없지만 그 이유를 아십니까?
Anders Metnik

이 접근 방식을 사용하여 조건부 스타일을 지정하는 방법은 무엇입니까? 사진이 null이 아닌지 확인하고이 스타일 만 적용하고 싶다면?
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>

또한보십시오


6

스타일이 삭제 된 것 같습니다. 우회하려면 DomSanitizer의 bypassSecurityTrustStyle 메서드를 사용해보세요.

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 인코딩이 필요했습니다.

이스케이프가 필요한 문자가없는 다른 이미지 URL을 시도하여 문제가 있는지 확인할 수 있습니다.

encodeURI () 메서드에 내장 된 자바 스크립트를 사용하여 구성 요소의 데이터에이를 수행 할 수 있습니다.

개인적으로 템플릿에서 사용할 수 있도록 파이프를 만들고 싶었습니다.

이를 위해 매우 간단한 파이프를 만들 수 있습니다. 예를 들면 :

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

다음 두 가지 방법을 사용할 수 있습니다.

방법 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에서 background-image를 지정하는 경우처럼 작은 따옴표를 추가하지 않았습니다.

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

그렇게하려면 \ '를 통해 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>

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.