24

I am building an Angular 2.0 component and I want to control it's style dynamically (using ng-style). After a quick view on Angular 2's docs i tried this:

<div class="theme-preview" ng-style="{'font-size': fontSize}">
  {{fontSize}}
</div>

And saw that the size is actually printed inside the div but did not affected the style. fontSize is one of component's property bindings', meaning the component gets it from its parent like this:

<my-component [font-size]="size" />

While inside the component I have:

@Component({
  selector: 'XXX',
  properties: ['fontSize']
})

Am I missing something here?

hirse
  • 2,394
  • 1
  • 22
  • 24
Yaniv Efraim
  • 6,633
  • 7
  • 53
  • 96

3 Answers3

52

Update

People still reach this answer, so I've updated the plnkr to beta.1. Two things have changed so far

  • NgStyle is no longer necessary to be explicitly added in directives property. It's part of the common directives that are added by default.
  • The syntax has changed, now it must be camel case.

Example

@Component({
  selector : 'my-cmp',
  template : `
    <div class="theme-preview" [ngStyle]="{'font-size': fontSize+'px'}">
   {{fontSize}}
  </div>`
})
class MyCmp {
  @Input('font-size') fontSize;
}

@Component({ 
  selector: 'my-app',
  directives: [MyCmp],
  template: `
    <my-cmp [font-size]="100"></my-cmp>
  `
})

See this plnkr (Updated to beta.1)

Community
  • 1
  • 1
Eric Martinez
  • 31,277
  • 9
  • 92
  • 91
19

For specific style, you can also use this:

<div class="theme-preview" [style.font-size]="fontSize+'px'">
nir
  • 3,050
  • 2
  • 20
  • 19
0

Something like this is actually working on latest version of angular right now 4, the syntax actually changed, please notice the [ngStyle]

.color-box {
    width: 10px;
    height: 10px;
    display: inline-block;
}

<div class="color-box" [ngStyle]="{'background-color': your.model.object.color_code}"></div>
d1jhoni1b
  • 7,497
  • 1
  • 51
  • 37