Làm cách nào để thêm hình nền bằng ngStyle (angle2)?


102

Làm cách nào để sử dụng ngStyle để thêm background-image? Mã của tôi không hoạt động:

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

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

tại sao bạn sử dụng dấu ngoặc trên thuộc tính ngStyle?
gal

Xem thêm stackoverflow.com/questions/37076867/… về một vấn đề liên quan trong RC.1
Günter Zöchbauer

Câu trả lời:


227

Tôi nghĩ bạn có thể thử điều này:

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

Từ cách đọc ngStylebiểu cảm của bạn , tôi đoán rằng bạn đã bỏ sót một số "'" ...


Thử nghiệm. Làm việc với RC.1. Nó should't cần thiết cho RC.2 và phiên bản mới hơn theo những gì họ nói ở đây
Lucio Mollinedo

4
Tôi thích hơn this.photo = `url(${photo})`; [style.background-image]='photo'.
slideshowp 2

4
Lưu ý rằng khoảng trắng trong URL hình ảnh (tên hình ảnh) có thể gây ra lỗi im lặng [ngStyle][style.background-image]hiển thị.
vulp

83

Ngoài ra, bạn có thể thử điều này:

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


3
@ redfox05 Tôi cho rằng ngStyle là một đường cú pháp. Sự khác biệt chính là ngStyle cho phép bạn áp dụng một số quy tắc css, nhưng [style. <css_prop>] chỉ cho phép một quy tắc. Tiếp theo là tương đương: <div [ngStyle]="{ color: 'red', 'font-size': '22px' }">First</div><div [style.color]="'red'" [style.font-size.px]="22">Second</div>
Todmy

Tôi đã sử dụng phương pháp [style.css] này, mặc dù tôi không thể làm cho [style.background-repeat] hoạt động, bạn biết tại sao không?
Anders Metnik

Làm thế nào để tạo kiểu có điều kiện bằng cách sử dụng phương pháp này? Giả sử nếu tôi muốn kiểm tra xem ảnh không phải là null và sau đó chỉ áp dụng phong cách này?
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>

Xem thêm


6

Có vẻ như kiểu của bạn đã được khử trùng, để vượt qua nó, hãy thử sử dụng phương thức bypassSecurityTrustStyle từ 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

Sử dụng thay thế

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

3

Hình nền của tôi không hoạt động vì URL có một khoảng trống trong đó và do đó tôi cần phải mã hóa URL.

Bạn có thể kiểm tra xem đây có phải là vấn đề bạn đang gặp phải hay không bằng cách thử một URL hình ảnh khác không có các ký tự cần thoát.

Bạn có thể thực hiện việc này với dữ liệu trong thành phần chỉ bằng cách sử dụng Javascripts được tích hợp trong encodeURI () phương thức .

Cá nhân tôi muốn tạo một đường ống cho nó để nó có thể được sử dụng trong mẫu.

Để làm điều này, bạn có thể tạo một đường ống rất đơn giản. Ví dụ:

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>

0

Bạn có thể sử dụng 2 phương pháp:

Phương pháp 1

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

Phương pháp 2

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

Lưu ý: điều quan trọng là phải bao quanh URL bằng " char.


0

Chủ yếu là hình ảnh không được hiển thị vì URL của bạn chứa khoảng trắng. Trong trường hợp của bạn, bạn gần như đã làm đúng mọi thứ. Ngoại trừ một điều - bạn đã không thêm các dấu ngoặc kép giống như bạn làm nếu bạn chỉ định hình nền trong css Ie

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

Để làm như vậy, hãy thoát ký tự quot trong HTML qua \ '

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

0

Giải pháp của tôi, sử dụng câu lệnh if..else. Luôn luôn là một thực tiễn tốt nếu bạn muốn tránh những thất vọng không cần thiết, hãy kiểm tra xem biến của bạn có tồn tại và được thiết lập hay không. Nếu không, hãy cung cấp hình ảnh dự phòng trong trường hợp; Bạn cũng có thể chỉ định nhiều thuộc tính kiểu, như background-position: center, v.v.

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.