Ich möchte, dass meine Nav-Leiste in der Lage ist, in den Warenkorb gelegte Objekte zu zählen.Ionic Header item count
Teil index.html
:
<ion-nav-bar class="bar-dark" ng-controller="navBarCtrl">
<ion-nav-back-button class="button-icon icon ion-ios-arrow-back"></ion-nav-back-button>
<ion-nav-buttons side="secondary">
<div ng-include="" src="'templates/partials/navigation.html'"></div>
</ion-nav-buttons>
</ion-nav-bar>
Hier ist das nav-bar Teil:
<div>
<a class="button button-icon icon ion-person" ng-href="#/editUserDetails"></a>
<a class="button button-icon icon ion-android-cart" ng-href="#/cart">
<span class="badge badge-assertive">{{item.count}}</span>
</a>
<button class="button button-icon icon ion-android-more-vertical" ng-click="showActionsheet()"></button>
</div>
Und hier ist navBarCtrl
das Element aus API zählen zurückgibt:
.controller('navBarCtrl', ['Injection', '$scope', '$http', 'SERVER', function (Injection, $scope, $http, SERVER) {
Injection.ResourceFactory.getResource($http, SERVER, 'order/itemCount')
.then(function (response) {
$scope.item = {count: response.data.itemCount};
localStorage.setItem('countItem', response.data.itemCount);
});
}])
Problem:
Beim Wechseln zwischen den Ansichten wird die Anzahl nicht aktualisiert, und wenn das Chrome Inspection Tool verwendet wird, zeigt das Netzwerk an, dass die Route nicht mehr als einmal aufgerufen wird, wenn ich die App starte. Wenn ich mit F5 auffrische, wird die Anzahl aktualisiert ... wie kann ich das beheben?
EDIT:
Count Update in API (Laravel PHP):
public function orderItemCount()
{
$user = $this->authUserAndCreateOrder();
$count = $user->orders->last()->order_items->count();
if (!empty($count)) {
return Response::json([
'itemCount' => $count,
]);
}
return Response::json([
'itemCount' => 0,
]);
}
Ich habe versucht, auch manuell einstellen, wenn Artikel in den Warenkorb gelegt, so dass die lokale Speicherung Updates verwendet wird:
confirmAddingToCartPopup: function ($ionicPopup, $state, $scope) {
$ionicPopup.confirm({
//...
});
$scope.item = {count:localStorage.getItem('countItem')};
localStorage.setItem('countItem', ++$scope.item.count);
},
Geben Sie den Code ein, in dem Sie die Zählung erhöhen. – theblindprophet
Der $ scope innerhalb des navbar-Controllers ist nicht der selbe wie im controller mit der 'confirmAddingToCartPopup' Methode. Deshalb wird $ scope.item nicht aktualisiert. Sie sollten einen eckigen Service oder eine Fabrik erstellen, in der Sie Ihren Zähler aufbewahren würden (siehe ** Lösung 1 ** in meiner Antwort - ich kann Ihnen bei Bedarf einen Moduscode zur Verfügung stellen). Weisen Sie diesem Zähler kein neues Objekt zu, wie 'service.item = {count: newValue}', da Sie einen Verweis darauf verwenden werden. Ändern Sie einfach die Eigenschaft "count". Auf diese Weise können Sie den Wert zwischen den Controllern teilen. – PJDev