如果没有使用JavaScript连接到应用程序的通知,则删除应用程序
Remove Applications if there are no Notifications connected to the Apps using JavaScript
我有一个"通知"应用程序,它在其中显示不同的应用程序,这些应用程序可能有关联的通知。如果应用程序没有通知,则只显示应用程序本身。加载应用程序后,我希望检查是否有与应用程序相关的通知。如果不存在通知,那么我希望这些应用程序不被显示或删除。我不确定我的代码出了什么问题。
我认为我需要在listenForNotifications
或getApps
中添加一些代码来检查是否有,如果没有,则"删除"应用程序。getApps
首先被击中,并拉入用户可能拥有的应用程序。所以,也许可以在那里查看是否有任何通知与该应用程序相关?我以为我走在了正确的轨道上,但它仍然不起作用。
控制器
function NotificationsCtrl($scope, $state, Service, SecService, RecService) {
var vm = this;
vm.ctrlName = 'NotificationsCtrl';
$scope.showMenu = false;
$scope.appList = {};
$scope.dismissNotification = function(notification) {
EcosystemService.dismissNotification(notification.id).then(
function (response) {
delete $scope.appList[notification.appId].notifications[notification.id];
});
};
$scope.dismissNotifications = function(app) {
var notifications = app.notifications;
for (var id in notifications) {
EcosystemService.dismissNotification(notifications[id].id).then(
function(notificationId) {
return function (response) {
delete app.notifications[notificationId];
}
}(id));
}
};
$scope.init = function () {
Service.getUserAppsByEmail(SecService.secState.username).then(function (response) {
var apps = response.applications;
$scope.appList['notes'] = {
name: 'Notes',
notifications: {}
} ;
for(var i = 0; i < apps.length; i++) {
$scope.appList[apps[i].appId] = {
name: apps[i].name,
icon: apps[i].icon,
notifications: {}
}
}
});
};
function listenForNotifications() {
RealtimeService.on("notifications", function (data) {
var app = $scope.appList[data.body.appId];
if (app != null) {
if(!data.body.dismissed) {
data.body.unixEpoch = Date.parse(data.body.whenCreated);
app.notifications[data.body.id] = data.body;
}
else {
delete app.notifications[data.body.id];
delete app.appList[data.body.appId];
}
}
else {
delete app.appList[data.body.appId];
}
});
}
您可以执行以下操作:
<div ng-repeat="app in appList" ng-if="app.notifications.length > 0">
.......
</div>
<div ng-if="noNotifications()">No notifications!</div>
$scope.noNotifications = function() {
var foundNotifications = true;
angular.forEach($scope.appList, function(app, index) {
foundNotifications = foundNotifications && app.notifications && app.notifications.length > 0;
});
return !foundNotifications;
};
编辑:我添加了一个更简单的解决方案,通过检查$scope.noNotifications()
函数来显示"无通知"。
这就是最终解决问题的原因。。。将其添加到HTML 中
<div ng-repeat="app in appList" ng-show="(app.notifications | AssociativeArrayFilter) > 0">
并将其添加到控制器中
angular.module('notifications').filter('AssociativeArrayFilter', function () {
return function (collection) {
if (!collection) {
return 0;
}
var reCount = 0;
angular.forEach(collection, function (val, index) {
reCount++;
});
return reCount;
}
})
相关文章:
- Meteor应用程序上的警报/通知不会出现
- GCM推送通知,如果应用程序在手机中关闭(Phonegap Android)
- 在通知点击时使用Ion中的OneSignal插件路由到应用程序中的状态
- 是否可以使用推送通知Windows 8 Metro应用程序's使用Javascript
- 如何使用Quickblox在Cordova应用程序中实现推送通知支持
- 如何安全地获取&使用Facebook应用程序访问令牌发送通知使用PHP&Javascript
- Phonegap应用程序检查是否启用了推送通知
- 为什么在应用程序打开时收到通知时弹出UIAlertview(科尔多瓦)
- 点击通知时打开应用程序内的网址 - Onesignal,Phonegap
- 通过GCM在Progressive web应用程序中推送通知
- 点击通知后启动Firefox OS应用程序
- 当未读邮件通过Office 365应用程序(离子移动应用程序)时通知
- 聊天应用程序 - 当有人进入/离开房间时,用声音通知用户
- 如何创建应用程序独立通知服务器
- 应用程序邀请不会通知用户
- Facebook,通知用户我的应用程序更新
- chrome应用程序通知不显示baloon通知
- 单击应用程序通知后,如何重定向到我的应用程序配置文件页面
- 是否有可能使Chrome应用程序通知发出声音
- HTML Web应用程序通知系统