這是因爲在第二種情況下,您覆蓋設置爲參考的cartContent因此,在覆蓋內容時,對cart
所做的任何更改都不會反映到範圍中,因爲$ scope.cart仍指向舊引用。因此,在您的控制器中,將$scope.cart
設置爲Cart
服務和訪問cartContent,以便scope.cart
現在具有對Cart對象本身的引用,並且對其屬性所做的任何更改也將反映在該範圍的屬性中。
controller('cartBoxCtrl', function ($scope, Cart){
$scope.cart = Cart; //<-- here
});
和
<li ng-repeat="product in cart.cartContent track by $index">
還要注意軌道通過使用(這裏我用$指數,而不是你可以使用該對象的前一個獨特的屬性: - product.id),這樣名單將由被跟蹤,而不是角創建唯一密鑰$$haskkey
Plnkr
或者,如果你想清理cartContent,仍然保持cartContent作爲參考在$scope.cart
那麼你可以做: -
this.addProduct = function (product) {
//Cleanup the current array and insert new item
this.cartContent.splice(0, this.cartContent.length, product);
};
Plnkr
來源
2014-09-13 00:14:12
PSL
你的答案的第二部分是正是我需要的:)謝謝 ! – michaelcurry 2014-09-13 00:21:20
@michaelcurry哦解釋不是必需的? :P – PSL 2014-09-13 01:49:41
哦,那是:P它讓我解釋了我在做什麼。謝謝。 [過去兩天從頭開始學習Angular] – michaelcurry 2014-09-13 01:59:38