Angular2 / Firebase - Array1等于array2而不将它们绑定在一起

时间:2018-03-18 02:40:27

标签: javascript angular firebase firebase-realtime-database

对不起,我发现很难说出我正确的问题..

我有一个名为feedCounter的数组和一个名为postFeed的数组。我想显示feedCounter的长度,当用户点击它postFeed时,feedCounter等于feedCounter,但当postFeed获得新元素feedCounter时不用它来更新......

我正在做的是将snapshot设置为firebase中的this.subscription.on('child_added', (snapshot) => { this.feedCounter.push(snapshot.val()); });

html

然后在我的<div (click)="postFeed = feedCounter;">{{feedCounter?.length}}</div> <post *ngFor="let post of postFeed.reverse()"></post> 我这样做:

postFeed

问题是,在我第一次点击feedCounter div后,postFeed似乎被绑定到php code自动更新,我不想要..

我该如何解决这个问题?谢谢!

2 个答案:

答案 0 :(得分:1)

而不是在点击处理程序中执行此操作:

postFeed = feedCounter

您需要创建一个feedcounter的副本;否则,你使它们都指向同一个对象(同一个数组)。所以,

postFeed = copy(feedCounter)

现在你必须实现复制功能,有几种方法可以做到,你可以google它(如何复制数组javascript),使用像lodash这样的lib,或者自己实现它。

一个选项是JSON解析和解析:

copy = (arr) => JSON.parse(JSON.stringify(arr));

如果你需要处理循环依赖等,你需要决定你是浅层还是深层。

答案 1 :(得分:1)

根本原因是您指定了NotificationCenter.default.addObserver(self, selector: #selector(screenRefreshedFunction), name: NSNotification.Name(rawValue: "app has returned from background"), object: nil),因此两个变量都将引用同一个数组,并将新元素添加到feedCounter,就像将新元素添加到postFeed一样。要分离那些你应该克隆它,然后分配如下:postFeed = feedCounter;