Meine eckige App verwendet mehrere Controller und alle von ihnen verwenden die Zwei-Wege-Bindung perfekt in Ordnung außer diesem. Aus irgendeinem Grund werden die Scope-Variablen in meinem angular.extend nicht aktualisiert, wenn ich die Variable zu einem späteren Zeitpunkt ändere. Hier ist, was ich tue:Zwei-Wege-Bindung Angularjs Bug
angular.extend($scope, {
cart: {
products: [
{amount: 1, name: 'product 1', total: 4.95},
{amount: 4, name: 'product 2', total: 4.95},
{amount: 2, name: 'product 3', total: 4.95},
],
deliveryCost: 0,
total: 0,
orderContinue: false,
}
});
Und wenn ich will einen Artikel in den Warenkorb legen, ich mache:
addToCart: function(id) {
var newProduct = {amount: 1, name: 'product 4', total:5.94};
$scope.cart.products.push(angular.extend(newProduct));
}
Wenn ich meinen $ scope.cart.products in der addToCart Funktion console.log, es zeigt die neu hinzugefügte Produkt, aber dann, wenn ich es in meiner Ansicht aktualisiert haben wollen, ist es nicht fügen sie einfach das gewünschte Produkt nicht in die Liste:
<div class="row" ng-controller="cartController">
<div class="col-md-12">
<h4>Cart</h4>
<div class="row" ng-repeat="products in cart.products">
<div class="col-md-2">
{{products.amount}}
</div>
<div class="col-md-8">
{{products.name}}
</div>
<div class="col-md-2">
<a href="#">X</a>
</div>
</div>
</div>
wird das Produkt wie dieses
<div ng-controller="cartController" class="col-xs-4 col-sm-2 col-lg-2" style="border: 1px solid black;">
<button ng-click="addToCart(1)">Add to</button>
</div>
hinzugefügt Was mache ich falsch?
Warum Sie verwenden 'angular.extend' hier? Für das, was Sie tun, scheint es nicht notwendig. Sie sollten nur '$ scope.carts - {cart: ....}' und '$ scope.cart.products.push ({...})' 'sagen können. Meine Ahnung ist, dass Ihre Verwendung von angular.extend keinen Digest-Zyklus auslöst, der zu einer Aktualisierung der Ansicht führen würde. – ryanlutgen
Es ist, weil Sie 'cartController' zweimal im HTML deklariert haben - diese Controller teilen keine Instanzen, sie erstellen jeweils ihre eigene Instanz. – tymeJV