我在app.js - > $ ionicPlatform.ready函数中添加通知并处理接收通知事件。该选项卡有自己的tabCtrl,标签Badge从badgeService获取值。
收到通知后,在app.js - > $ ionicPlatform.ready - > onReceive func中,它会更新服务徽章值。
但现在的问题是,在app.js中通过badgeService更新徽章编号后,标签徽章不会立即更新,但是当您切换到其他选项卡时,它会更新。
那么为什么服务数据更改不会更新tabCtrl Scope值?是因为更新app.js中的服务徽章不会触发tabCtrl?
顺便说一句,我通过服务功能绑定标签徽章值只是为了避免$ broadcast,我在app.js中尝试过$ broadcast并在tabCtrl中使用$ on,这样可行,但我担心这不是最好的实践。以下是我如何定义tabCtrl:
angular.module('app').controller('app.tabs.tabsController',
function ( $scope, $rootScope, badgeService) {
$scope.badges =function(){
return badgeService.setBadgeCount();
}
}])
tab.html:
<ion-tab title="Message" icon-on="ion-social-buffer-outline positive" icon-off="ion-social-buffer-outline" href="#/tab/message" badge="badges()" badge-style="badge-assertive">
<ion-nav-view name="message"></ion-nav-view>
</ion-tab>
badgeService:
app.factory('badgeService', function (localStorageService) {
var setBadgeCount = function () {
var count = 0;
var badgeInfos = localStorageService.get('badgeInfo');
if (badgeInfos) {
for (var i = 0; i < badgeInfos.length; i++) {
count += badgeInfos[i].msgInfos.length;
}
}
if (count > 0 && count <= 99) {
return count.toString();
} else if (count > 99) {
return "99+";
} else {
return "";
}
}
return {
setBadgeCount: setBadgeCount
}
})
app.js:
$ionicPlatform.ready(function () {
var onReceiveNotification = function(){
badgeService.setBadgeCount();
})
答案 0 :(得分:0)
我用上面的代码创建了一个codepen。 这很有效......很奇怪,为什么我的应用程序不能像这样...... 对于想要参考的人,请检查this:
//check this link: http://codepen.io/sylfree9999/pen/GZyjae
答案 1 :(得分:0)
请注意,当范围中的变量异步更新时,不会执行视图绑定。
您可能希望使用this blog post中记录的$scope.$apply(function() {})
来更新回调中的变量。
我已成功将此方法与离子标签徽章一起使用,解决了我的问题(在“选项”标签中更改首选项应更新Android上其他非活动标签图标上的标记)。