如何使用ngStyle(angular2)添加背景图片?


Answers:


227

我认为您可以尝试以下方法:

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

通过阅读您的ngStyle表情,我想您错过了一些“'” ...


经过测试。使用RC.1。根据他们在这里
Lucio 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]正常工作,但您知道为什么吗?
安德斯·梅特尼克

如何使用这种方法进行条件样式?假设我要检查photo是否不为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进行编码。

您可以尝试其他图像网址,其中没有需要转义的字符,从而检查这是否是您遇到的问题。

您可以仅使用encodeURI()方法中内置的Javascript对组件中的数据执行此操作。

我个人想为其创建一个管道,以便可以在模板中使用它。

为此,您可以创建一个非常简单的管道。例如:

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

您可以使用2种方法:

方法1

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

方法2

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

注意:网址必须以 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>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.