Valor vinculante al estilo


82

Estoy tratando de vincular una propiedad de color de mi clase (adquirida por el enlace de atributos) para establecer el background-colorde mi 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 + ";";
    }
}

Mi plantilla:

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

El uso de este componente:

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

Mi enlace no funciona, pero tampoco arroja ninguna excepción.

Si pusiera {{changeBackground()}}en algún lugar de la plantilla, devolvería la cadena correcta.

Entonces, ¿por qué no funciona el enlace de estilo?

Además, ¿cómo vería los cambios en la propiedad de color dentro de la Circleclase? ¿Cuál es el reemplazo de

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

en Angular 2?

Respuestas:


104

Resulta que la unión de estilo a una cuerda no funciona. La solución sería unir el fondo del estilo.

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

te perdiste la cita a partir de alligator.io/angular/style-binding-ngstyle-angular <div class="circle" [style.background]="'color'">
Saad Benbouzid

1
En aras de la claridad: coloren este caso, es una propiedad en su componente que contiene el valor que desea utilizar. Si usa comillas, ese es el valor que desea usar. colorno es un color CSS válido. Tendría que ser algo así [style.background] = "'#f3f3f3'".
SeanH

41

A partir de ahora (enero de 2017 / Angular> 2.0) puede usar lo siguiente:

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

y

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

El camino más corto probablemente sea así:

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

23

Me las arreglé para hacerlo funcionar con alpha28 así:

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;
    }
}

y lo llamo así <circle color='yellow'></circle>


3
  • En su app.component.html use:

      [ngStyle]="{'background-color':backcolor}"
    
  • En app.ts declarar variable de tipo de cadena backcolor:string.

  • Establezca la variable this.backcolor="red".


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.