
前回、「【Monaca】Onsen UIのツールバーのメニューアイコンにバッジを表示する」にてバッジを表示させたが、今回はバッジのカウント機能を追加してみた。
コード内のコメントに書いたとおり、一つ一つの処理を理解すれば難しいことはない。
メニューのPage1をタップすると、カウントが5から1ずつ減る。
バッジの表示・非表示はng-showで行っており、page1Controller内のmenuCountが0になれば表示されない。


| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | <!DOCTYPE HTML> <html> <head>     <meta charset="utf-8">     <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">     <meta http-equiv="Content-Security-Policy" content="default-src * data:; style-src * 'unsafe-inline'; script-src * 'unsafe-inline' 'unsafe-eval'">     <script src="components/loader.js"></script>     <link rel="stylesheet" href="components/loader.css">     <link rel="stylesheet" href="css/style.css">     <script>         var app = ons.bootstrap("myApp", ["onsen"]);         app.controller("indexController", ["$scope", function($scope) {             // バッジのカウント数             $scope.badgeCount = 5;             // menuControllerからPage1タップの通知を受け取る             $scope.$on("subCount", function(e) {                 if ($scope.badgeCount > 0) {                     // バッジのカウント数を1つ減らす                     $scope.badgeCount -= 1;                 }             });         }]);         app.controller("menuController", ["$scope", "$rootScope", function($scope, $rootScope) {             // Page1タップイベント             $scope.showPage1 = function() {                 // indexControllerにPage1タップを通知する                 $rootScope.$broadcast("subCount");                 // Page1を表示                 app.slidingMenu.setMainPage("page1.html", { closeMenu: true });             }         }]);         app.controller("page1Controller", ["$scope", function($scope) {             // メニューアイコンに表示するバッジのカウント数             $scope.menuCount = 0;             // indexControllerのbadgeCountを監視する             $scope.$watchCollection("badgeCount", function(newVal, oldVal) {                 // バッジのカウント数を更新する                 $scope.menuCount = newVal;                 if (!$scope.$$phase) $scope.$apply();             });         }]);     </script>     <style>         .badgeToolbar {             position: absolute;             top: 5px;             left: 20px;         }     </style> </head> <body ng-controller="indexController">     <ons-sliding-menu var="app.slidingMenu" menu-page="menu.html" main-page="page1.html" side="left" type="overlay" max-slide-distance="200px">     </ons-sliding-menu>     <ons-template id="menu.html">         <ons-page style="background-color: white" ng-controller="menuController">             <ons-list>                 <ons-list-item                     modifier="tappable" class="list__item__line-height"                     ng-click="showPage1()"                     <i class="fa fa-home fa-lg" style="color: #666"></i>                       Page 1                 </ons-list-item>             </ons-list>         </ons-page>     </ons-template>     <ons-template id="page1.html">        <ons-page ng-controller="page1Controller">             <ons-toolbar fixed-style>                 <div class="left">                     <ons-toolbar-button ng-click="app.slidingMenu.toggleMenu()"><ons-icon icon="bars"></ons-icon></ons-toolbar-button>                     <span class="notification badgeToolbar" ng-show="menuCount > 0">{{menuCount}}</span>                 </div>                 <div class="center">Page 1</div>             </ons-toolbar>             <div style="text-align: center">                 <h1>Page 1</h1>                 <ons-button                     ng-click="app.slidingMenu.toggleMenu()">                     Toggle Menu                 </ons-button>                 <p> Click "Toggle Menu" to close/open menu, </p>                 <p> You can also swipe the page left/right.  </p>                 <img src="images/ico_swipe_right_s.png" alt="">             </div>         </ons-page>     </ons-template> </body> </html> | 




