【发布时间】:2017-03-10 14:24:42
【问题描述】:
我尝试在 ngfor 中调用一个方法
*ngFor=" let day of Days()" >{{day}}
方法:
Days(){
console.log("check");
return [1,2,3,4,5,6,7];
}
它执行一次模板,但问题是它登录控制台 3 次“检查”。 为什么会调用这个函数3次?
模板
<div class="table-responsive">
<table class="table table-bordered year">
<tr>
<td *ngFor=" let day of Days()" >{{day}}</td>
</tr>
</table>
</div>
控制器
export class MonthComponent{
//public num: number;
public lastday: number;
num = 1;
Days(){
console.log("check");
return [1,2,3,4,5,6,7];
}
getDays(){
if( this.num == 1 ){
let j=1;
let d = new Date();
let day = d.getDay();
let today = d.getDate();
let dif = today % 7;
let days = [];
if( day - dif <0){
dif = day - dif + 8;
}
else dif = day-dif;
for (let i = 0; i != 7; i+=1) {
if(i < dif-1) days.push(31-dif+i+2);
else {
days.push(j);
j+=1;
}
//console.log(days);
}
this.lastday = j-1;
this.num +=1;
console.log(days);
return days;
}
else{
let j = this.lastday;
let days = []
for (var i = 0; i < 7;i+=1) {
j +=1;
days.push(j)
}
this.lastday = j;
console.log(days);
console.log(this.num);
this.num +=1;
return days;
}
}
}
Days() 是测试函数,确实需要getDays()
【问题讨论】:
-
可以添加完整的控制器和模板代码吗?
-
@SefaÜmitOray 给你
-
因为 angular 会自动检测变化。要知道该方法返回的数组自上次检查更改后是否发生了更改,需要调用该方法。这完全是意料之中的正常现象。
-
我收到一个错误:“检查后表达式已更改。以前的值:'3,4,5,6,7,8,9'。当前值:'10,11,12 ,13,14,15,16'。”我可以以某种方式改变这一点还是我应该改变我的逻辑? @JBNizet
-
您的方法总是返回相同的硬编码数组。你的真实密码是什么?更重要的是,为什么不在 ngOnInit 方法中只执行一次这段代码来初始化组件的一个字段?