2016-04-06 8 views
1

Ich füge Benachrichtigung hinzu und handle das Empfangsbenachrichtigungsereignis in app.js -> $ ionicPlatform.ready-Funktion. Die Registerkarte hat ihre eigene tabCtrl und die Registerkarte Badge erhält den Wert aus dem badgeService.Ionic-Tab Badge wird nicht aktualisiert, es sei denn, Sie wechseln die Registerkarte

Sobald Sie die Benachrichtigung erhalten haben, wird in app.js -> $ ionicPlatform.ready -> onReceive-Funktion der Service-Badge-Wert aktualisiert.

Jetzt ist das Problem, dass, nachdem Sie die Badge-Nummer von badgeService in app.js aktualisieren, die Registerkarte Badge nicht sofort aktualisiert wird, aber wenn Sie auf die andere Registerkarte wechseln, wird es aktualisiert.

Warum ändert die Änderung der Servicedaten den Wert für tabCtrl Scope nicht? Liegt es daran, dass die Aktualisierung des Dienstabzeichens in app.js tabCtrl nicht auslöst?

BTW, binde ich die Registerkarte Abzeichen Wert durch Service-Funktion, nur um die $ Broadcast zu vermeiden, habe ich $ Broadcast in app.js und $ auf in der TabCtrl versucht, das funktioniert, aber ich fürchte, das ist nicht die beste Übung.

Hier ist, wie ich die tabCtrl definieren:

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

Antwort

0

Ich habe einen Codepen mit dem obigen Code erstellt. Und das funktioniert .... Ganz merkwürdig, warum meine app nicht so verhalten könnte ... Für alle, die pls verweisen möchte, überprüfen this:

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

Bitte beachten Sie, dass Ansicht Bindungen werden nicht ausgeführt, wenn Die Variablen im Bereich werden asynchron aktualisiert.

Sie können $scope.$apply(function() {}) wie in this blog post dokumentiert verwenden, um Variablen in einem Callback zu aktualisieren.

Ich habe erfolgreich diese Methode mit ionischen Tab Badges verwendet, löst mein Problem (Änderung der Einstellungen auf der Registerkarte Optionen sollte Badges auf dem Symbol der anderen nicht aktiven Registerkarten aktualisieren) auf Android.

Verwandte Themen