2015-10-05 14 views
0

Я пытаюсь использовать $ rootScope. $ WatchCollection в моем коде для обновления данных в контроллере B от контроллера A. но я не получаю в этом никакого успеха. поскольку мое приложение застряло на этом этапе, поэтому я ищу вашу помощь, чтобы я мог узнать, где я ошибаюсь в коде.

контроллер Б: -

app.controller('MenuCtrl', function($scope, LocalStorage, $stateParams, 
 
    \t \t $rootScope) { 
 
    \t $scope.user = {}; 
 
    \t $scope.user.userName = LocalStorage.getData("userName"); 
 
    \t $scope.user.profilePic = LocalStorage.getData("userProfile"); 
 

 
    \t $rootScope.$watchCollection(function(n, o) { 
 
    \t \t if (n !== o) { 
 
    \t \t \t var list = $rootScope.wholecartList; 
 
    \t \t \t alert("Length " + list.length); 
 
    \t \t } 
 
    \t }); 
 
    });

Контроллер А: -

app.controller('ProductCtrl', function($http, $scope, $ionicPopup, $state, 
 
\t \t $ionicHistory, $ionicLoading, DataService, LocalStorage, $stateParams, 
 
\t \t ProductId, DuplicateCheck, $rootScope) { 
 
\t $scope.productList = DataService.getProducts(); 
 

 
\t $scope.getProductId = function(productId) { 
 
\t \t ProductId.addProductId(productId); 
 
\t \t $state.go("app.products-details"); 
 

 
\t } 
 
\t var cartList = []; 
 
\t $scope.cartListItems = function(product) { 
 
\t \t if (cartList.length > 0) { 
 
\t \t \t if (!DuplicateCheck.getProducts(product.product_id, cartList)) { 
 
\t \t \t \t cartList.push(product); 
 
\t \t \t } 
 
\t \t } else { 
 
\t \t \t cartList.push(product); 
 
\t \t } 
 
\t \t $rootScope.wholecartList = cartList; 
 
\t } 
 

 
});

Любая помощь будет высоко оценили Спасибо.

+0

Вам нужно добавить еще немного кода - пока не ясно, когда и что называется. Тем не менее, $ rootScope. $ WatchCollection (function (n, o) {if (n! == o) {<< это странно: вы регистрируетесь только при изменении объекта, т. Е. Если я просто добавляю объект в массив - ваш журнал не запускается ... Итак, вы должны использовать обычные $ watch. –

+0

Hey petr, спасибо за ваш ответ, но я действительно не понимаю вашу точку зрения. Вы поняли мой вопрос ... я просто хочу отображать счет в меню html и список будет проходить из productCtrl, этот список содержит количество элементов, выбранных пользователем, поэтому я просто хочу показать счет в моем ui на картинке cart, который находится в файле menu.html. – sid

ответ

0

После этого вам необходимо обновить $ rootScope (скажем, запустить цикл Apply);

app.controller('ProductCtrl', function($http, $scope, $ionicPopup, $state, 
 
\t \t $ionicHistory, $ionicLoading, DataService, LocalStorage, $stateParams, 
 
\t \t ProductId, DuplicateCheck, $rootScope) { 
 
\t $scope.productList = DataService.getProducts(); 
 

 
\t $scope.getProductId = function(productId) { 
 
\t \t ProductId.addProductId(productId); 
 
\t \t $state.go("app.products-details"); 
 

 
\t } 
 
\t var cartList = []; 
 
\t $scope.cartListItems = function(product) { 
 
\t \t if (cartList.length > 0) { 
 
\t \t \t if (!DuplicateCheck.getProducts(product.product_id, cartList)) { 
 
\t \t \t \t cartList.push(product); 
 
\t \t \t } 
 
\t \t } else { 
 
\t \t \t cartList.push(product); 
 
\t \t } 
 
\t \t $rootScope.wholecartList = cartList; 
 
       updateRootScope(); 
 
\t } 
 

 
     function updateRootScope(){ 
 
      if(!$rootScope.$$phase){ 
 
       $rootScope.$apply(); 
 
      } 
 
     } 
 
});

+0

Hey iLoveJS, спасибо за ваш ответ , после ввода кода я получаю белый экран – sid

+0

Есть ли еще какие-либо проблемы или это ожидаемая страница? – jsNovice

+0

нет нет другой проблемы, кроме этого, я просто пытаюсь отправить список контроллеру B на каждую кнопку в продукте Html, чтобы я мог показать количество на html меню, сколько элементы, которые содержит список карт. – sid

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