Angularjs 除非您切换选项卡,否则Ionic Tab Badge不会更新

Angularjs 除非您切换选项卡,否则Ionic Tab Badge不会更新,angularjs,ionic-framework,Angularjs,Ionic Framework,我在app.js-->$ionicPlatform.ready函数中添加通知并处理接收通知事件。选项卡有自己的tabCtrl,tab Badge从badgeService获取值 收到通知后,在app.js-->$ionicPlatform.ready-->onReceive func中,它将更新服务徽章值 但现在的问题是,在app.js中通过badgeService更新徽章编号后,不会立即更新选项卡徽章,但当切换到其他选项卡时,它会更新 那么,为什么服务数据更改不更新tabCtrl范围值呢?是否

我在app.js-->$ionicPlatform.ready函数中添加通知并处理接收通知事件。选项卡有自己的tabCtrl,tab Badge从badgeService获取值

收到通知后,在app.js-->$ionicPlatform.ready-->onReceive func中,它将更新服务徽章值

但现在的问题是,在app.js中通过badgeService更新徽章编号后,不会立即更新选项卡徽章,但当切换到其他选项卡时,它会更新

那么,为什么服务数据更改不更新tabCtrl范围值呢?是否因为更新app.js中的服务徽章不会触发tabCtrl

顺便说一句,我通过服务功能绑定tab badge值只是为了避免$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>

我已经用上面的代码创建了一个代码笔。 这是有效的。。。。很奇怪,为什么我的应用程序不能这样运行。。。 任何想要参考的人,请检查:


我已经用上面的代码创建了一个代码笔。 这是有效的。。。。很奇怪,为什么我的应用程序不能这样运行。。。 任何想要参考的人,请检查:


请注意,异步更新范围中的变量时,不会执行视图绑定

您可能希望使用中所述的
$scope.$apply(function(){})
来更新回调中的变量


我已经成功地将此方法用于ionic选项卡标记,解决了我在Android上的问题(更改选项选项卡中的首选项应更新其他非活动选项卡图标上的标记)。

请注意,当范围中的变量异步更新时,不会执行视图绑定

您可能希望使用中所述的
$scope.$apply(function(){})
来更新回调中的变量

我已经成功地将此方法用于ionic选项卡徽章,解决了我在Android上的问题(更改选项选项卡中的首选项应更新其他非活动选项卡图标上的徽章)

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
            }
        })
   $ionicPlatform.ready(function () {
       var onReceiveNotification = function(){
              badgeService.setBadgeCount();
    })
//check this link: http://codepen.io/sylfree9999/pen/GZyjae