聊天应用程序 - 当有人 enters/leaves 进入房间时通过声音通知用户
Chat application - Notify users with sound when someone enters/leaves the room
我调整了 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,我非常希望我的应用程序能够像这个笨蛋一样运行。
在两个不同的选项卡(或浏览器)中打开 plunk,然后加入两个用户的聊天室。当两个用户之一joins/leaves时,另一个获得alert
。这是有效的,因为我们将访问相同的 plunk。
但是如何实时实现呢?
注意:我在上面的示例中使用了 alert
而不是音频,因为它更易于演示。
我找到了解决方案。使用 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();
}
}
我调整了 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,我非常希望我的应用程序能够像这个笨蛋一样运行。
在两个不同的选项卡(或浏览器)中打开 plunk,然后加入两个用户的聊天室。当两个用户之一joins/leaves时,另一个获得alert
。这是有效的,因为我们将访问相同的 plunk。
但是如何实时实现呢?
注意:我在上面的示例中使用了 alert
而不是音频,因为它更易于演示。
我找到了解决方案。使用 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();
}
}