Comment utiliser ngStyle pour ajouter une image d'arrière-plan? Mon code ne fonctionne pas:
this.photo = 'http://dl27.fotosklad.org.ua/20121020/6d0d7b1596285466e8bb06114a88c903.jpg';
<div [ngStyle]="{'background-image': url(' + photo + ')}"></div>
Comment utiliser ngStyle pour ajouter une image d'arrière-plan? Mon code ne fonctionne pas:
this.photo = 'http://dl27.fotosklad.org.ua/20121020/6d0d7b1596285466e8bb06114a88c903.jpg';
<div [ngStyle]="{'background-image': url(' + photo + ')}"></div>
Réponses:
Je pense que vous pouvez essayer ceci:
<div [ngStyle]="{'background-image': 'url(' + photo + ')'}"></div>
En lisant votre ngStyle
expression, je suppose que vous avez manqué quelques "" "...
this.photo = `url(${photo})`;
[style.background-image]='photo'
.
[ngStyle]
et de [style.background-image]
rendu.
Vous pouvez également essayer ceci:
[style.background-image]="'url(' + photo + ')'"
<div [ngStyle]="{ color: 'red', 'font-size': '22px' }">First</div>
et <div [style.color]="'red'" [style.font-size.px]="22">Second</div>
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>
Voir également
On dirait que votre style a été nettoyé, pour le contourner, essayez d'utiliser la méthode bypassSecurityTrustStyle de 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>
Utilisez plutôt
[ngStyle]="{'background-image':' url(' + instagram?.image + ')'}"
Mon image de fond ne fonctionnait pas car l'URL contenait un espace et j'avais donc besoin de l'encoder par URL.
Vous pouvez vérifier si c'est le problème que vous rencontrez en essayant une URL d'image différente qui ne contient pas de caractères à échapper.
Vous pouvez faire cela pour les données du composant en utilisant simplement les Javascripts intégrés à la méthode encodeURI () .
Personnellement, je voulais créer un tuyau pour cela afin qu'il puisse être utilisé dans le modèle.
Pour ce faire, vous pouvez créer un tuyau très simple. Par exemple:
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>
La plupart du temps, l'image n'est pas affichée car votre URL contient des espaces. Dans votre cas, vous avez presque tout fait correctement. Sauf une chose - vous n'avez pas ajouté de guillemets simples comme vous le faites si vous spécifiez background-image dans css Ie
.bg-img { \/ \/
background-image: url('http://...');
}
Pour ce faire, échappez le caractère quot en HTML via \ '
\/ \/
<div [ngStyle]="{'background-image': 'url(\''+ item.color.catalogImageLink + '\')'}"></div>
Ma solution, en utilisant l'instruction if..else. C'est toujours une bonne pratique si vous voulez éviter des frustrations inutiles, pour vérifier que votre variable existe et qu'elle est définie. Sinon, fournissez une image de sauvegarde au cas où; Vous pouvez également spécifier plusieurs propriétés de style, telles que background-position: center
, etc.
<div [ngStyle]="{'background-image': this.photo ? 'url(' + this.photo + ')' : 'https://placehold.it/70x70', 'background-position': 'center' }"></div>