Javascript 如何同时使用AngularJS和Firebase网站向所有人发送更新?

Javascript 如何同时使用AngularJS和Firebase网站向所有人发送更新?,javascript,angularjs,firebase,firebase-realtime-database,httprequest,Javascript,Angularjs,Firebase,Firebase Realtime Database,Httprequest,所以,假设我和3个朋友同时从3台不同的计算机上使用同一个网站。我们每个人都有存储在阵列中的配置文件,这些配置文件看起来有点像: $scope.profilesRanking = [ {name:"Bob", score: 3000}, {name:"John", score: 2500}, {name:"Carl", score: 100} ] 请注意,这些配置文件是按其得分值排序的,我希望实现的是,不必在web浏览器中按刷新按钮,我希望整个站点的更改都能在发生时发生。

所以,假设我和3个朋友同时从3台不同的计算机上使用同一个网站。我们每个人都有存储在阵列中的配置文件,这些配置文件看起来有点像:

$scope.profilesRanking = [
    {name:"Bob", score: 3000},
    {name:"John", score: 2500},
    {name:"Carl", score: 100}
]
请注意,这些配置文件是按其得分值排序的,我希望实现的是,不必在web浏览器中按刷新按钮,我希望整个站点的更改都能在发生时发生。因此,如果Carl和John都获得3000分,所有用户的记分板都应该在不停止任何其他主要过程的情况下更新

所有3个用户应立即看到:

$scope.profilesRanking = [
    {name:"John", score: 5500},
    {name:"Carl", score: 3100},
    {name:"Bob", score: 3000}
]

我正在使用Firebase存储这些数据,但我想知道如何定期检查数据库中的值,而不让请求溢出。我想到的唯一方法就是这样做,我每秒钟向数据库发送一个请求,但我觉得这不是一个很好的方法。

我建议您使用
AngularFire
,这是一个使使用AngularJS和Firebase更容易的库。他们的回购协议包含了你需要采取的所有步骤

我建议您使用
angular fire
,这是一个使AngularJS和Firebase更容易使用的库。他们的回购协议包含了你需要采取的所有步骤

使用Firebase,您可以添加一个值更改侦听器,无论何时在Firebase存储中更改引用的对象(或任何子对象),该侦听器都会在角度代码中调用回调

这就是你如何做到的:

function startListening(){
    var ref = new Firebase('yoururl');

    ref.on('value').then(function(snapshot){
        // This callback will be called every time the object referenced by 'ref'
        // or any children, is changed.
        $scope.$apply(function(){
            $scope.profilesRanking = snapshot.val();
        });
    });
}
$scope.$apply
用于让angular知道它应该触发摘要循环


这是可能的,因为在幕后,Firebase使用WebSocket传输数据,比常规异步http请求的速率更高

使用Firebase,您可以添加一个值更改侦听器,无论何时在Firebase存储中更改引用的对象(或任何子对象),该侦听器都会在角度代码中调用回调

这就是你如何做到的:

function startListening(){
    var ref = new Firebase('yoururl');

    ref.on('value').then(function(snapshot){
        // This callback will be called every time the object referenced by 'ref'
        // or any children, is changed.
        $scope.$apply(function(){
            $scope.profilesRanking = snapshot.val();
        });
    });
}
$scope.$apply
用于让angular知道它应该触发摘要循环


这是可能的,因为在幕后,Firebase使用WebSocket传输数据,比常规异步http请求的速率更高

如果您使用的是Firebase,则无需反复检查服务器以获取更新。这就是Firebase数据库的第一项工作,就是保持你对所有客户的引用同步。你能给我们看看你的Firebase代码吗?@frosty到目前为止,它只是getter和setter。我有点希望我的数据不用按按钮就能更新。这就是firebase的魔力。让我举一个例子,如果你使用的是Firebase,你不需要一次又一次地检查服务器的更新。这就是Firebase数据库的第一项工作,就是保持你对所有客户的引用同步。你能给我们看看你的Firebase代码吗?@frosty到目前为止,它只是getter和setter。我有点希望我的数据不用按按钮就能更新。这就是firebase的魔力。让我举个例子。