2016-02-29 4 views
1

Я новичок в угловой и все еще борюсь с основами.Значение не обновлено

У меня есть значок корзины в моем меню с заданным значением до 0 при первой загрузке.

В списке продуктов у меня есть кнопка для каждого продукта, чтобы сказать «AddToCart». Итак, что я хочу -

Я хочу обновить значение корзины, когда я нажимаю кнопку AddToCart. Однако начальное значение корзины настраивается угловым, но я не могу ее обновить дальше.

Вот код-

var app = angular.module("productsApp", []) 
.factory("sharedService", ['$rootScope', function ($rootScope) { 
     var sharedServiceRef = { 
      cart: 0, 
      setCartValue: function (product) { 
       if (product) { 
        this.cart = this.cart + 1; 
        sharedServiceRef.cart = this.cart; 
       } 
       else { 
        sharedServiceRef.cart = 0; 
       } 
       console.log(sharedServiceRef.cart); 
      } 
     }; 
     return sharedServiceRef; 
    }]); 


function ProductListController($scope, sharedService) { 
    $scope.addItemToCart = function (product) { 
     sharedService.setCartValue(product); 
    } 
} 

function CartController($scope, sharedService) { 
    $scope.cart = sharedService.cart; 
} 

При начальной загрузке страницы она устанавливает значение корзину в view-

<div ng-controller="CartController"> 
     {{cart}} 
    </div> 

И когда я изменить значение в другой контроллер и установить его -

function ProductListController($scope, sharedService) { 
    $scope.addItemToCart = function (product) { 
     sharedService.setCartValue(product); 
    } 
} 

Это не обновляет значение корзины, оно остается 0 на первом месте.

Как обновить значение в угловом?

Редактировать Это мой вид, где добавить кнопка быть called-

<div ng-controller="ProductListController"> 
    <div ng-repeat="product in products"> 
     <span> 
      $ {{product.salePrice}} 
     </span> 
     <div> 
      <a ng-click="addItemToCart(product)"> 
       Add To Cart 
      </a> 
     </div> 
    </div> 
</div> 
+0

Можете ли вы разместить html-часть вещей для тележки, пожалуйста? –

+0

может это помочь? http://stackoverflow.com/questions/15800454/angularjs-the-correct-way-of-binding-to-a-service-properties – Dario

+0

@JohnMc, см. сейчас – Manoj

ответ

2

Ваша ошибка была не угловая ошибка, но Javascript один.

Когда вы сделаете это: $scope.cart = sharedService.cart;

вы присваиваете значение не является ссылкой, другими словами, она является копией исходных значений, изменения, сделанные в sharedService.cart не будет влиять на переменную $scope.cart

В javascript примитивные переменные присваиваются значением значения, а объекты по ссылке, поэтому вы можете назначить объект $scope.cart

Здесь находится плунжер с примером его работы https://plnkr.co/edit/MKSofFcgEWMjwQaOvLsP?p=preview

+0

Всего минуту, поэтому вы хотите сказать ссылку на объект это то, что связано внутри, а не с самим объектом. Правильно? – Manoj

+0

Вот очень хорошее объяснение о том, что http://stackoverflow.com/questions/518000/is-javascript-a-pass-by-reference-or-pass-by-value-language –