聊天应用程序 - 当有人进入/离开房间时通知用户有声音

时间:2016-03-02 10:37:26

标签: javascript angularjs firebase angularfire

我已经调整了firebase聊天应用程序(快速入门教程中提供的那个)并向其添加了用户状态信息,即,当任何用户进入或离开房间时,向其他用户显示消息。例如:用户A已加入。

现在,我正在尝试在用户离开或进入房间时向应用添加声音通知。我正在使用ngAudio模块来执行此操作。但是,到目前为止,我无法实现此功能。

目前,我试过这个。 我正在使用浅表来继续检查chatstatus数组

$scope.$watchCollection('chatstatus', function (newVal, oldVal) { 

         if ($scope.chatstatus[$scope.chatstatus.length-1].status.indexOf("joined") > -1) {
            $scope.joinedplay.play();

        }
        else{
            $scope.leftplay.play();
         }

    });

但是当我这样做时,只有登录的用户才会收到声音通知,而不是其他人(显而易见,因为控制器只是为他执行)。

我也尝试过使用ngRepeatFinished指令(在显示列表的最后一个元素时触发声音通知)。但这也不起作用。

我为此做了一个 Plunker ,我确实希望我的应用能够像这个插件一样表现。

在两个不同的标签页(或浏览器)中打开插件,并与两个用户一起加入聊天室。当两个用户中的一个加入/离开时,另一个用户获得alert。这是有效的,因为我们将访问相同的插件。

但如何实时实现这一目标?

注意:我在上面的示例中使用了alert而不是音频,因为它更容易演示。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。使用Firebase.on()解决了问题。 https://www.firebase.com/docs/web/api/query/on.html

 statusref.on('child_added', function(childSnapshot, prevChildKey) {
            var postsData = null;
            postsData = childSnapshot.val();
            logResults(postsData);
    });

    function logResults(postsData) {
        if (postsData.status.indexOf("joined") > -1) {
            $scope.joinedplay.play();

        }
        else{
            $scope.leftplay.play();
         }
    }