Cla*_*diu 4 data-binding angularjs typescript angular
我想在Angular2中制作一个圆形板.例如,我想制作10个圆圈,但实际上这个数字可以改变.我想计算每个圆的半径,所以它是动态的而不是静态的.例如,参见图片
这是我的代码
@Component({
selector:"circle"
template: `
<svg>
<circle *ngFor='#item of forLength #i=index #l=last #e=even'
cx="50%" cy="50%" [style.r]="calculateRadius()" stroke="black" stroke-width="5" fill="white"></circle>
<svg/>
`
})
export class CircleComponent{
public maxRadius:number=25;
public totalRounds:number=10;
public x:number=30;
public calculateRadius():number{
var distanceBetweenCircles=this.maxRadius/(this.totalRounds-1);
this.x-= distanceBetweenCircles;
return this.x;
}
}
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
calculateRadius() in CircleComponent@7:30' has changed after it was checked.
Previous value: '-7.500000000000007'.
Current value: '-36.66666666666668' in [calculateRadius() in CircleComponent@7:30]
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来编写这个for循环*ngFor而不是在单独的方法中写这个?
Mar*_*cok 15
在开发模式(默认)下,更改检测运行两次以确保模型更改已稳定.这意味着ngFor循环被评估两次.因此x,在第二次更改检测运行时,属性将继续递减.您的应用中的其他活动也会导致更改检测运行,x并将继续递减.因此,您必须编写所有视图函数,例如calculateRadius(),假设它们将被执行多次.例如:
public calculateRadius(i):number{
return this.x - i*this.distanceBetweenCircles;
}
Run Code Online (Sandbox Code Playgroud)
模板语法开发指南在描述幂等表达式时会提到这一点.
这也将解决value has changed after it was checked问题.
您还需要r使用以下语法绑定SVG属性: [attr.r]="..."不[style.r]="...".
| 归档时间: |
|
| 查看次数: |
10170 次 |
| 最近记录: |