2016-07-26 1 views
0

У меня есть контроллер поиска, контроллер категории и фабрика общих свойств. В моей категории контроллер я поставил sharedproperties.property, но я не в состоянии получить данные в контроллер поиска его, кажется, пустые данные здесь мой кодНевозможно переместить данные с одного контроллера на другой в угловых js

.factory('sharedProperties', function() { 
     var property = ''; 

     return { 
      getProperty: function() { 
       return property; 
      }, 
      setProperty: function(value) { 
       property = value; 
      } 
     }; 
}) 


.controller("SearchCtrl",['config','sharedproperties',function(config,sharedproperties) 
{ 

$scope.search_subCategory_businesses= function() 
     { 
      $scope.bus_es = sharedProperties.getProperty(); 
      console.log("sharedProperty hahahaah is",sharedProperties.getProperty()); //logs empty instead of data 

      angular.forEach($scope.bus_es,function(value,key) 
         { 
          $scope.business = value; 

          if($scope.business.logo == '' || $scope.business.logo==null) 
          { 
           $scope.business.logo=config.BaseImageURL+"uploads/defbanner.png" 
          }else 
          { 
           $scope.business.logo=config.BaseImageURL+$scope.business.logo; 
          } 
          this.push($scope.business); 

         },$scope.businesses); 

     }; 

     //$scope.search_resultsFunction(); 
     $scope.search_subCategory_businesses(); 


}]) 



.controller("CategoryCtrl",['config','sharedproperties',function(config,sharedproperties) 
{ 

$scope.getBusinesses=function(sub_category_id) 
    { 
      $.get($scope.BaseURL+"classes/util.php?sub_category_id="+sub_category_id+"&transaction=get_businesses",function(results){ 

       alert("results are"+JSON.parse(results)); 
       $scope.bus_es =JSON.parse(results); 
       sharedProperties.setProperty($scope.bus_es);//successfully sets property 

       console.log("sharedProperty is",sharedProperties.getProperty()); 
       window.location.href=BaseURL+"search.php"; 
     }); 


    } 

}]) 
+0

Не похоже, что 'sharedProperties' включен в ваши контроллеры. –

+0

Вам необходимо ввести службу в свои контроллеры. Теперь вы вводите только «config»? –

+0

хорошо, что я только что забыл при публикации вопроса, но они были введены – henrybbosa

ответ

0

Вы смешиваете Jquery обратные вызовы и угловые Promises. Вы должны вызвать BackEnd через $ http и использовать обещания. Документация для $ HTTP: https://docs.angularjs.org/api/ng/service/ $ HTTP

.factory('sharedProperties', function() { 
 
     var property = ''; 
 

 
     return { 
 
      getProperty: function() { 
 
       return property; 
 
      }, 
 
      setProperty: function(value) { 
 
       property = value; 
 
      } 
 
     }; 
 
}) 
 

 

 
.controller("SearchCtrl",['config','sharedproperties',function(config,sharedproperties) 
 
{ 
 

 
$scope.search_subCategory_businesses= function() 
 
     { 
 
      $scope.bus_es = sharedProperties.getProperty(); 
 
      console.log("sharedProperty hahahaah is",sharedProperties.getProperty()); //logs empty instead of data 
 

 
      angular.forEach($scope.bus_es,function(value,key) 
 
         { 
 
          $scope.business = value; 
 

 
          if($scope.business.logo == '' || $scope.business.logo==null) 
 
          { 
 
           $scope.business.logo=config.BaseImageURL+"uploads/defbanner.png" 
 
          }else 
 
          { 
 
           $scope.business.logo=config.BaseImageURL+$scope.business.logo; 
 
          } 
 
          this.push($scope.business); 
 

 
         },$scope.businesses); 
 

 
     }; 
 

 
     //$scope.search_resultsFunction(); 
 
     $scope.search_subCategory_businesses(); 
 

 

 
}]) 
 

 

 

 
.controller("CategoryCtrl",['$http','config','sharedproperties',function($http,config,sharedproperties) 
 
{ 
 

 
$scope.getBusinesses=function(sub_category_id) 
 
    { 
 
      $http.get($scope.BaseURL+"classes/util.php?sub_category_id="+sub_category_id+"&transaction=get_businesses").then(function(results){ 
 

 
       alert("results are"+JSON.parse(results)); 
 
       $scope.bus_es =JSON.parse(results); 
 
       sharedProperties.setProperty($scope.bus_es);//successfully sets property 
 

 
       console.log("sharedProperty is",sharedProperties.getProperty()); 
 
       window.location.href=BaseURL+"search.php"; 
 
     }); 
 

 

 
    } 
 

 
}])

Еще лучше делать эти HTTP-вызовы в службу, которая отвечает за связь с бэкэнда.

+0

Ну, спасибо @ Kenneth, но я заметил, что моя проблема в том, что для меня, чтобы обновить контроллер поиска, мне нужно сначала вызвать функцию, но в действительности, контроллер поиска уже загружен, поэтому я загружаю его до того, как свойство службы было set..So мне все еще нужна помощь, чтобы выйти из этой ловушки. – henrybbosa

+0

Самое простое решение для вас создать plnkr с некоторыми тестовыми данными, тогда я смогу увидеть логику и исправить ее. –

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