2015-05-14 4 views
0

У меня есть html-файл родительской оболочки, который имеет значок для обновления количества продуктов в корзине. Предполагается, что номер будет получен с завода.Родительский контроллер прослушивает событие от дочернего контроллера

angular 
    .module('awesome') 
    .factory('ProductFactory', productFactory); 
    function productFactory($log) { 
    var factory = { 
     addCartProducts: addCartProducts, 
     getCartCount: getCartCount 
    }, 
    cartProducts = []; 

    return factory; 

    function addCartProducts(product) 
    { 
     cartProducts.push(product); 
     getCartCount(); 
     $log.info(cartProducts.length); 
    } 
    function getCartCount() { 
     return cartProducts.length; 
    } 
} 

В родительском контроллере у меня есть scope значение тянет из

$scope.count = ProductFactory.getCartCount() 

В контроллере ребенка я добавляю в корзину

$scope.addToCart = function (product) { 
    ProductFactory.addCartProducts(product); 
}; 

Однако при добавлении к cart, я могу видеть в журнале, что они добавляются, однако элемент в родительском контроллере не обновляется. Что мне не хватает?

+3

Что такое фрагмент кода для родительского контроллера? – ABOS

+0

жаль, что я назвал его «shell» контроллером, который является родительским фрагментом –

+0

Как контроллер оболочки знает, что ребенок обновлен. Вы не показываете нам соответствующий код, я верю. – PSL

ответ

0

Причина, по которой ваш счет не обновляется, заключается в том, что вы устанавливаете его на значение, возвращаемое ProductFactory.getCartCount(). Если вы внесете дополнительные изменения в $ scope.count в контроллере, обновления будут происходить, но дальнейшие изменения в ProductFactory.getCartCount() не будут. Вот то, что вы могли бы сделать:

Родитель контроллер:

$scope.getCount() = function() { 
    return ProductFactory.getCartCount(); 
} 

и с вашей точки зрения, вместо того, чтобы использовать {{число}}, используйте {{GetCount()}}

I надеюсь это поможет!

+2

Это не очень хорошая практика. IMHO ... Это так же хорошо, как добавлять часы на 'ProductFactory.getCartCount()'. Но что, если OP не просто отображает счет в представлении, а ищет что-то делать, когда элемент был добавлен. – PSL

+1

hmmm ... как вы упомянули, это было бы не идеально, если бы OP захотела манипулировать счетчиком и от родительского контроллера ... но если это так, OP будет лучше с директивой, которая слушает $ broadcasts , вместо этого кода в контроллере. –

+1

Yup я с вами на этом. Создайте компонент (директиву) со своим собственным контроллером, выслушайте событие из директивы и вызовите соответствующий метод контроллера. – PSL

Смежные вопросы