Невозможно обновить значок на Ionic Tab с помощью сообщения от службы

Хорошо, я довольно новичок в Angular и провел последние 3 часа в этом вопросе.

У меня есть приложение для ионных вкладок, и я хочу обновлять значок на вкладке уведомлений всякий раз, когда что-то происходит, я должен думать, что это проблема с областью видимости, но я запутался

Я просмотрел этот пост и в основном делаю то, что предложено в ответе. Счетчик угловых ионных значков не обновляется.

У меня есть контроллер, который контролирует данные вкладки уведомлений (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 ответ

Решение

Попробуйте позвонить $scope.$apply(); внутри вашего обработчика событий "уведомление получено"

Другие вопросы по тегам