除非您切换选项卡,否则Ionic-Tab徽章不会更新

时间:2016-04-06 14:33:16

标签: angularjs ionic-framework

我在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();
    })

2 个答案:

答案 0 :(得分:0)

我用上面的代码创建了一个codepen。 这很有效......很奇怪,为什么我的应用程序不能像这样...... 对于想要参考的人,请检查this

//check this link: http://codepen.io/sylfree9999/pen/GZyjae

答案 1 :(得分:0)

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

您可能希望使用this blog post中记录的$scope.$apply(function() {})来更新回调中的变量。

我已成功将此方法与离子标签徽章一起使用,解决了我的问题(在“选项”标签中更改首选项应更新Android上其他非活动标签图标上的标记)。