Próbuję powiązać właściwość koloru z mojej klasy (nabytą przez powiązanie atrybutu), aby ustawić background-color
moje 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 + ";";
}
}
Mój szablon:
<style>
.circle{
width:50px;
height: 50px;
background-color: lightgreen;
border-radius: 25px;
}
</style>
<div class="circle" [style]="changeBackground()">
<content></content>
</div>
Zastosowanie tego komponentu:
<circle color="teal"></circle>
Moje powiązanie nie działa, ale nie zgłasza też żadnych wyjątków.
Jeśli umieściłbym {{changeBackground()}}
gdzieś w szablonie, zwróci to poprawny ciąg.
Dlaczego więc styl wiązania nie działa?
Jak też miałbym obserwować zmiany właściwości koloru wewnątrz Circle
klasy? Jaki jest zamiennik
$scope.$watch("color", function(a,b,){});
w Angular 2?
<div class="circle" [style.background]="'color'">
color
w tym przypadku jest to właściwość komponentu, która zawiera wartość, której chcesz użyć. Jeśli używasz cudzysłowów, to jest to wartość, której chcesz użyć.color
nie jest prawidłowym kolorem CSS. Musiałoby to być coś podobnego[style.background] = "'#f3f3f3'"
.Od teraz (styczeń 2017 / Angular> 2.0) możesz używać następujących:
changeBackground(): any { return { 'background-color': this.color }; }
i
<div class="circle" [ngStyle]="changeBackground()"> <!-- <content></content> --> <!-- content is now deprecated --> <ng-content><ng-content> <!-- Use ng-content instead --> </div>
Najkrótsza droga wygląda prawdopodobnie tak:
<div class="circle" [ngStyle]="{ 'background-color': color }"> <!-- <content></content> --> <!-- content is now deprecated --> <ng-content><ng-content> <!-- Use ng-content instead --> </div>
źródło
Udało mi się to zrobić z alfą28 tak:
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; } }
i tak to nazwał
<circle color='yellow'></circle>
źródło
W swoim app.component.html użyj:
W app.ts deklarujemy zmienną typu string
backcolor:string
.Ustaw zmienną
this.backcolor="red"
.źródło
Próbować
[attr.style]="changeBackground()"
źródło