无法使用来自服务的消息更新Ionic选项卡上的徽章

时间:2015-12-19 03:44:34

标签: angularjs ionic-framework ionic

好的,我对角度很新,并且在这个问题上花了最后3个小时。

我有一个离子标签应用程序,我想在发生任何事情时更新通知标签上的徽章,我认为这是一个范围问题,但我很困惑

我经历了另一篇文章,我基本上在回答Angular ionic badge count not updating

中提出了什么

我有一个控制器来控制通知标签数据(TabsCtrl)。当我使用间隔更新徽章时,徽章上会显示正确的值。但是,当我使用广播消息的消息服务时,我无法更新徽章。

这里有一个奇怪的事情:我可以直接登录到控制台,并且TabsCtrl中有更新的徽章计数,但是当我设置$ scope.User时,徽章没有得到更新。如果我点击通知标签,那么徽章就会更新。

在TabsCtrl中,我会收听消息并接收消息。这时我更新$ scope.User = User但我没有更新徽章。我可以打印User.notificationsCount,并在控制台上显示正确的值。

另外,当我使用间隔(注释掉)时,它可以正常工作。

我错过了什么?

Tabs.html     

  <!-- Dashboard Tab -->
  <ion-tab title="Activities" icon-off="ion-ios-pulse" icon-on="ion-ios-pulse-strong" href="#/tab/activities">
    <ion-nav-view name="tab-activities"></ion-nav-view>
  </ion-tab>

  <!-- Notifications Tab -->
  <ion-tab title="Notifications" ng-controller="TabsCtrl" badge="User.notificationsCount" badge-style="badge-assertive" icon-off="ion-android-notifications-none" icon-on="ion-android-notifications" href="#/tab/notifications">
    <ion-nav-view name="tab-notifications"></ion-nav-view>
  </ion-tab>

  <!-- Settings Tab -->
  <ion-tab title="Account" icon-off="ion-ios-cog-outline" icon-on="ion-ios-cog" href="#/tab/account">
    <ion-nav-view name="tab-account"></ion-nav-view>
  </ion-tab>

</ion-tabs>

TabsCtrl看起来像这样(注意我的两个区间都已被注释掉了。)

angular.module('controllers').controller 'TabsCtrl', ($scope, $stateParams, User, Settings, $interval)->
  initialize = ()->
    $scope.$on "notification:received", (err,data)->
      console.log "nofication"
      $scope.User = User
    ###$interval ()->
      $scope.User = User
    , 1000###
    $scope.User = User

  initialize()
  return

我如何设置我的应用

$stateProvider
    .state 'tab',
      url: '/tab'
      abstract: true
      controller: "MainCtrl"
      templateUrl: 'templates/tabs.html'
      resolve:
        populateSession : ($state, User)->
          return User.populateSession()
    .state 'tab.activities',
      url: '/activities'
      views: 'tab-activities':
        templateUrl: 'templates/tab-activities.html'
        controller: 'ActivitiesCtrl'
    .state 'tab.notifications',
      url: '/notifications'
      views: 'tab-notifications':
        templateUrl: 'templates/tab-notifications.html'
        controller: 'NotificationsCtrl'
    .state 'tab.account',
      url: '/account'
      views: 'tab-account':
        templateUrl: 'templates/tab-account.html'
        controller: 'AccountCtrl'
  # if none of the above states are matched, use this as the fallback
  $urlRouterProvider.otherwise '/tab/activities'
  return

1 个答案:

答案 0 :(得分:2)

尝试在“通知:收到”事件处理程序

中调用$scope.$apply();