2015-02-12 75 views
0

從控制器執行ajax調用。這個調用可以從兩個不同的鏈接觸發,這兩個鏈接都在同一個html模板中。當使用上述鏈接切換到選項卡時,由ajax調用返回的數據將正確顯示。當使用refresh鏈接時,ng-repeat中的元素將不會更新。任何人都知道這是爲什麼?angular:爲什麼不會用ajax調用的數據重複更新?

angularjs:

app.controller("ActiveSimulations", 
    ["$scope", "$http", "socket", 
    function($scope, $http, socket){ 

     $scope.active_simulations_dict = {}; 
     $scope.get_active_simulations = function() { 
      var responsePromise = $http.get("/active_simulations"); 
      responsePromise.success(function (data, status, headers, config) { 
       $scope.active_simulations_dict = data; 

       console.log($scope.active_simulations_dict) 
      }); 
      responsePromise.error(function (data, status, headers, config) { 
       console.log('Warning - "AJAX failed!"') 
       alert("AJAX failed!"); 
      }); 
     }; 
}]); 

HTML

<div id="followSim" class="tab-pane fade"> 
    <h3>Follow running simulations</h3> 
    <div class="inline-containers"> 
    <div id="simulation-list-wrapper"> 
     <ul class="list-unstyled"> 
     <li ng-repeat="(key, value) in active_simulations_dict"> 
      <a ng-show="value[0] && value[2]" ng-click="followActiveSimulation(key)"> 
      {[{ value[0] }]} ({[{ value[2] }]} is director) 
      </a> 
     </li> 
     </ul> 
    </div> <!--end simulation list wrapper--> 

    <div id="refresh-simulation-list" ng-controller="ActiveSimulations"> 
     <a id="refresh-link" 
      class="right-side" 
      ng-click="get_active_simulations()"> 
      <i class="icon-refresh right-side"></i> 
      refresh list 
     </a> 
    </div> 
+1

第一個想法:它是一個單獨的控制器,您很可能會打破範圍。所以你重複使用的active_simulations_dict是一個與你在ActiveSimulations控制器中訪問的變量不同的變量。 – kasoban 2015-02-12 09:21:24

回答

1

由於@kasoban指出你可能有多個實例的問題。最佳做法是創建一個處理您的請求的服務。您可以注入它並從任何控制器調用請求功能,例如:

$scope.active_simulations_dict = RequestService.get_active_simulations(); 
相關問題