【问题标题】:Prevent Firebase $firebaseArray auto update防止 Firebase $firebaseArray 自动更新
【发布时间】:2016-09-06 22:19:02
【问题描述】:

我正在开发一个类似于 Facebook 动态消息的动态消息。我按以下顺序实现它:

  1. 应用启动时,获取所有内容,但只推送两个项目显示。

  2. 用户可以向下滚动查看更多内容,我将在列表中添加更多内容。

  3. 如果有新项目,用户需要拉动刷新才能添加新项目。

我现在唯一的问题是每次添加一个项目时,$firebaseArray 会自动将新项目添加到我不希望 snyc 更改的数组中(我想查询一次,得到一个集合列表)。我想知道是否有人知道如何防止自动更新?

【问题讨论】:

    标签: angularjs ionic-framework firebase angularfire


    【解决方案1】:

    查看 .once 这将允许您只获取一次数据:https://firebase.google.com/docs/reference/js/firebase.database.Query#once

    【讨论】:

    • 虽然once() 确实有帮助,但问题是$firebaseArray()on() 抽象出OPs 代码。
    • 对,这就是为什么我认为 OP 不能使用它。
    • 感谢弗兰克和马修!我正在使用 firebaseArray,因为我正在这样做。 var queryOfeverything = firebase.database().ref("events").orderByChild("dateSince1970").startAt(nowSince1970);我正在订购我收到的事件,我只想获得超过特定日期的事件。如果我确实使用过一次,我可以为每个包含过去某个日期的事件并在角度中使用 orderby。这是最有效的方法吗?非常感谢!
    • 您可以在查询后执行 .once。正如弗兰克所说,$firebaseArray 只是抽象出一些更复杂的 firebase。他们很棒的 api 文档中的所有常规内容仍然可以正常工作。
    【解决方案2】:

    不要将$firebaseArray 直接绑定到视图,而是将其克隆到将绑定到视图的作用域(或控制器)属性。将此过程分解为您可以在用户拉取重新加载时调用的函数,以便重新创建 $firebaseArray

    更合适的方法是使用 Firebase 的 http api,以及 angular $http 服务。

    编辑:要将数组克隆到作用域变量,请尝试以下操作:

    var allEvents = $firebaseArray(queryOfeverything);
    
    allEvents.$loaded()
        .then(function(events){
            $scope.allEvents = angular.map(events, function(event) {
                return event; // you may want to replace this line - I am not very familiar with firebase.
            })
        });
    

    【讨论】:

    • 如果这就是你的意思,我已经做了类似的事情。 $scope.allEvents = $firebaseArray(queryOfeverything); $scope.eventToDisplay = $scope.allEvents。不幸的是,这不起作用。
    • 这是因为您通过引用传递了 $firebaseArray,这在技术上是一个 javascript 对象。您需要将(将数组克隆到普通的 javascript 数组)映射到该 $scope 变量。我会更新答案。
    猜你喜欢
    • 2016-09-24
    • 1970-01-01
    • 2016-09-19
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-19
    • 1970-01-01
    相关资源
    最近更新 更多