1

真的挂了一段时间......这不应该工作吗?

style="background-image:url('{{product.imageUrl}}')"

我无法在堆栈片段或 Codepen 中重现,因为它的角度特定。

我已经尝试了这个线程的建议,但无济于事:

https://github.com/angular/angular/issues/8745 https://github.com/angular/angular/issues/8491 https://github.com/angular/angular/issues/8514

这可能是因为我不明白在这种情况下我会将“安全”管道放在哪里。谢谢。

模板上下文:

<div *ngIf="product.title"
    class="card">
    <!-- <img *ngIf="product.imageUrl"
        class="card-img-top"
        [src]="product.imageUrl"
        alt="{{product.title}}"> -->

    <div *ngIf="product.imageUrl"
        class="card-img-top scale-img"
        style="background-image:url('{{product.imageUrl}}')"></div>

    <div class="card-body">
        <h5 class="card-title">{{product.title}}</h5>
        <p class="card-text">{{product.price | currency}}</p>


        <div *ngIf="showActions && Cart"
            class="card-footer">


            <button [routerLink]="['/products/', product.$key]"
                class="btn btn-details btn-secondary btn-block">Details</button>


            <button *ngIf="Cart.getQuantity(product) === 0; else updateQuantity"
                (click)="addToCart()"
                class="btn btn-secondary btn-block">Add to Cart</button>

            <ng-template #updateQuantity>
                <product-quantity [product]="product"
                    [cart]="Cart"></product-quantity>
            </ng-template>
        </div>

    </div>

</div>
4

1 回答 1

3

通常我们通过创建自定义管道来解决它,例如:

html

[style.backgroundImage]="product.imageUrl | safeStyle"

ts

@Pipe({
  name: 'safeStyle'
})
export class SafeStylePipe {
  constructor(private sanitizer: DomSanitizer) {}

  transform(val: string) {
    return this.sanitizer.bypassSecurityTrustStyle(`url('${val}')`);
  }
}

==================================================== ==========================

我不想混淆这个简洁的答案,但如果您仍然遇到问题:

我收到“未找到安全样式”错误,因此我提取了管道。

  1. 创建另一个名为“管道”的文件夹
  2. 制作文件。我称之为'safe-style.ts'
  3. 将此代码放入(编辑希望我使用 PipeTransform):

    从“@angular/core”导入 { PipeTransform, Pipe };从“@angular/platform-b​​rowser”导入 { DomSanitizer };

    @Pipe({ name: 'safeStyle' }) 导出类 SafeStylePipe 实现 PipeTransform { constructor(private sanitizer: DomSanitizer) { }

    transform(val: string) { return this.sanitizer.bypassSecurityTrustStyle( url('${val}')); } }

  4. 注释掉 @Pipe 代码并删除您放在组件中的管道导入。

  5. 导入组件:

    从'../pipes/safe-style'导入{ SafeStylePipe };

  6. 在 app 模块中声明你的管道并导入它。

    import { SafeStylePipe } from './pipes/safe-style';
    

    ...声明:[SafeStylePipe,]

  7. 应该可以,但是如果您仍然遇到该错误。我替换了(参见模板上下文)...

    <p class="card-text">{{product.price | currency}}</p>
    

    <p class="card-text">{{product.price | safeStyle}}</p>

不知何故,这让错误消失了,然后我把它改回了货币。我认为这是一个错误。但是,嘿,它现在有效。

Ng 运行示例

于 2018-03-04T18:22:19.000 回答