将价值绑定到样式


82

我正在尝试从类中绑定一个颜色属性(通过属性绑定来获取)以设置background-colormy div

import {Component, Template} from 'angular2/angular2';

@Component({
  selector: 'circle',
  bind:{
    "color":"color"
  }
})
@Template({
  url: System.baseURL + "/components/circle/template.html",
})
export class Circle {
    constructor(){

    }

    changeBackground():string{
        return "background-color:" + this.color + ";";
    }
}

我的模板:

<style>
    .circle{
        width:50px;
        height: 50px;
        background-color: lightgreen;
        border-radius: 25px;
    }
</style>
<div class="circle" [style]="changeBackground()">
    <content></content>
</div>

该组件的用法:

<circle color="teal"></circle>

我的绑定无法正常工作,但也不会引发任何异常。

如果我将其放在{{changeBackground()}}模板中的某处,则不会返回正确的字符串。

那么为什么样式绑定无效?

另外,我将如何观察Circle类内部对color属性的更改?什么是替代品

$scope.$watch("color", function(a,b,){});

在Angular 2中?

Answers:


104

原来样式绑定到字符串不起作用。解决的办法是绑定样式的背景。

 <div class="circle" [style.background]="color">

您错过了alligator.io/angular/style-binding-ngstyle-angular 的报价<div class="circle" [style.background]="'color'">
Saad Benbouzid

1
为了清楚起见:color在这种情况下,组件上的一个属性包含要使用的值。如果您使用的引号您要使用的值。color不是有效的CSS颜色。它需要像[style.background] = "'#f3f3f3'"
SeanH '19

41

截至目前(2017年1月/ Angular> 2.0),您可以使用以下内容:

changeBackground(): any {
    return { 'background-color': this.color };
}

<div class="circle" [ngStyle]="changeBackground()">
    <!-- <content></content> --> <!-- content is now deprecated -->
    <ng-content><ng-content> <!-- Use ng-content instead -->
</div>

最短的方法可能是这样的:

<div class="circle" [ngStyle]="{ 'background-color': color }">
    <!-- <content></content> --> <!-- content is now deprecated -->
    <ng-content><ng-content> <!-- Use ng-content instead -->
</div>

23

我设法使其与alpha28像这样工作:

import {Component, View} from 'angular2/angular2';

@Component({
  selector: 'circle', 
  properties: ['color: color'],
})
@View({
    template: `<style>
    .circle{
        width:50px;
        height: 50px;
        border-radius: 25px;
    }
</style>
<div class="circle" [style.background-color]="changeBackground()">
    <content></content>
</div>
`
})
export class Circle {
    color;

    constructor(){
    }

    changeBackground(): string {
        return this.color;
    }
}

并这样称呼它 <circle color='yellow'></circle>


3
  • 在您的app.component.html中使用:

      [ngStyle]="{'background-color':backcolor}"
    
  • app.ts中声明字符串类型的变量backcolor:string

  • 设置变量this.backcolor="red"


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.