如何在 Angular 2 中将对象传递给 NgStyle 指令?

How to pass Object to NgStyle directive in Angular 2?

我正在尝试将 NgStyle 指令与对象变量一起使用,如下所示:

@Component({
      template: `
            <div [ngStyle]="object">
              some test text
           </div>`
    })

export class example {
    private object: string = "{background-color: 'white'}";
}

我也试过 object = "background-color: 'red'"[ngStyle]="{object}",但似乎不起作用。我收到消息错误:

Error: Uncaught (in promise): Error caused by: Cannot find a differ supporting object '{color: 'white'}'(…)consoleError @ VM1051 zone.js@0.6.21?main=browser:346_loop_1 @ VM1051 zone.js@0.6.21?main=browser:371drainMicroTaskQueue @ VM1051 zone.js@0.6.21?main=browser:375ZoneTask.invoke @ VM1051 zone.js@0.6.21?main=browser:297

我做错了什么?

不要将 string 传递给 [ngStyle],传递 Object 即可:

private object: Object = { 'background-color': 'red'};

我对 ngStyle 也有类似的问题,并按如下方式修复:

[ngStyle]="{'top.px':dtPickerTop, 'left.px':dtPickerLeft}"

dtPickerTop 和 dtPickerLeft 是根据点击事件在我的组件中设置的。

添加 .px 使它起作用,而没有它似乎不起作用。

你也可以使用CSS-in-JS对象语法

这样,您就可以像普通的 JS 对象一样传递驼峰式的字符串,而不是用引号将 属性 字符串括起来

<div [ngStyle]="{backgroundColor: 'red', borderRadius: '10px', width: '100px' }">

</div>

为了拥有更简洁的模板,您始终可以在 TS 文件中定义您的样式对象...

=>.ts

export class MyComponent  {
 
   // ...
  
   stylesObj = {backgroundColor: 'red', borderRadius: '10px', width: '100px' }
}

=> .html

<div [ngStyle]="stylesObj">

</div>