Привязка значения к стилю

84

Я пытаюсь связать свойство цвета из моего класса (полученное путем привязки атрибута), чтобы установить значение 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класса? Какая замена

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

в Angular 2?

user1613512
источник

Ответы:

108

Оказывается, привязка стиля к строке не работает. Решением было бы привязать фон стиля.

 <div class="circle" [style.background]="color">
user1613512
источник
1
вы пропустили цитату из alligator.io/angular/style-binding-ngstyle-angular <div class="circle" [style.background]="'color'">
Саад Бенбузид
1
Для ясности: colorв данном случае это свойство вашего компонента, которое содержит значение, которое вы хотите использовать. Если вы используете кавычки, это значение, которое вы хотите использовать. colorнедопустимый цвет CSS. Это должно быть что-то вроде [style.background] = "'#f3f3f3'".
SeanH
41

На данный момент (январь 2017 г. / 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>

какаджа
источник
4
  • В вашем app.component.html используйте:

      [ngStyle]="{'background-color':backcolor}"
    
  • В app.ts объявить переменную строкового типа backcolor:string.

  • Установите переменную this.backcolor="red".

Manish Kunal
источник
2

Пытаться [attr.style]="changeBackground()"

Мацко
источник