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

Posted

技术标签:

【中文标题】如何在 Angular 2 中将对象传递给 NgStyle 指令?【英文标题】:How to pass Object to NgStyle directive in Angular 2? 【发布时间】:2017-03-23 17:11:22 【问题描述】:

我正在尝试将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",但它似乎不起作用。我收到消息错误:

错误:未捕获(承诺中):错误导致:找不到不同的支持对象 '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

我做错了什么?

【问题讨论】:

“作为一个对象,就像这样”但是你传递了一个字符串。 【参考方案1】:

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

这样,你可以直接传递camelCased,而不是用引号包围属性字符串,就像一个普通的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>

【讨论】:

【参考方案2】:

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

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

【讨论】:

模板绑定属性应该是公开的【参考方案3】:

我在 ngStyle 上遇到了类似的问题,并修复如下:

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

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

添加.px 使它工作,而没有它,它似乎没有。

【讨论】:

以上是关于如何在 Angular 2 中将对象传递给 NgStyle 指令?的主要内容,如果未能解决你的问题,请参考以下文章

在java Spring Boot中,如何在集成测试中将内存中的LDAPConnection对象传递给ldapService?

如何使用 MatDialog 将行数据或数组对象传递给 Angular 中的组件

如何从类定义中将参数传递给元类?

如何将 WebdriverIO 的浏览器对象传递给 SeleniumWebDriverHarnessEnvironment 以进行线束加载器(@angular/cdk/testing)

如何在django中将多个参数传递给url

Angular 2:如何将路由参数传递给子路由?