Javascript 阵列反转*会导致闪烁
我偶然发现了一个非常奇怪的问题。我正在构建一个带有Angular的Ionic应用程序,我有一个Javascript 阵列反转*会导致闪烁,javascript,angular,cordova,ionic-framework,ionic2,Javascript,Angular,Cordova,Ionic Framework,Ionic2,我偶然发现了一个非常奇怪的问题。我正在构建一个带有Angular的Ionic应用程序,我有一个ngFor,上面有一个reverse,奇怪的是,如果我在我的设备上运行它,它会工作得非常好,但只要我添加--prod变量以在生产状态下运行它,reverse就会引起剧烈的闪烁。本质上,它在反转状态和每秒未反转状态之间变化。。。它在不生产的时候工作得很好 这是一张gif: 19小时是我想先展示的,15天是我想最后展示的 以下是我从firebase获取的代码: goToNew() { this.zon
ngFor
,上面有一个reverse
,奇怪的是,如果我在我的设备上运行它,它会工作得非常好,但只要我添加--prod
变量以在生产状态下运行它,reverse
就会引起剧烈的闪烁。本质上,它在反转
状态和每秒未反转状态之间变化。。。它在不生产的时候工作得很好
这是一张gif:
19小时是我想先展示的,15天是我想最后展示的
以下是我从firebase获取的代码:
goToNew() {
this.zone = new NgZone({});
this.postFeed = new Array();
this.feedCounter = new Array();
this.database.database.ref('/posts/'+this.locationId)
.orderByChild('created')
.limitToLast(10)
.once('value', (snapshot) => {
snapshot.forEach(child => {
this.feedCounter.push(child.val());
this.postFeed.push(child.val());
return false;
});
});
}
这是我的HTML:
<ng-container *ngFor="let post of postFeed.reverse; let i = index">
<div *ngIf="i > 0 && i % 10 == 0" class="pageIndicator">
<div class="seperator"></div>
<div class="pageNumb">Page {{i / 10 + 1}}</div>
<div class="seperator"></div>
</div>
<post [postData]="post"></post>
</ng-container>
第{i/10+1}页
我也在goToNow()
函数中尝试了this.postFeed.reverse()
,但它的作用完全相同。我还尝试了this.postFeed.unshift()
而不是push
,但根本不起作用
正如我所说,当我以以下方式运行我的应用程序时,这将100%起作用:
爱奥尼亚cordova运行安卓设备
但一旦我这么做了:
爱奥尼亚cordova运行安卓--设备--产品
它疯了。删除reverse
是可行的,但这不是我想要显示数组的方式
我做错了什么?这是离子型/角型/其他类型的bug吗?我不知道为什么这不适用于
--prod
它似乎是由postFeed.reverse()
引起的,后者改变自身并返回自身
也就是说
var tmp = [1,2,3]
var tmp2 = tmp.reverse()
console.log(tmp) // [3,2,1]
console.log(tmp2) // [3,2,1]
console.log(tmp===tmp2) // true
上面代码中的最后一条语句表示tmp.reverse()
不返回新数组,而是返回本身
因此,在您的.html代码中,postFeed.reverse()
返回反转自身。随着更改的发生,postFeed.reverse()
将重复执行。然后,视图也会因为内容的改变而改变。因此,视图必须闪烁
您应该使用这种代码(例如,它不是有效的)
postFeed.concat()?