2015-10-06 127 views
0

加載時未顯示的ng-binding使用範圍內的數組中的數據。

該數組從另一個數組獲取數據(我們稱它們爲A)。

的NG結合這是已經裝上顯示從陣列A.使用數據

Data doesn't show Data show 這裏有幾種方法,以顯示其很奇怪的數據:
- 重點則不能集中任何的輸入
- 更改的任何輸入

加載時不顯示角度數據

你可以嘗試錯誤here值。

在這裏,我提供我的一些代碼片段:

 <div class="container-fluid " id="mainApp"> 

       <div class="container" ng-repeat='content in fetchedData'> 

        <h4>{{content[1]}}</h4> 

        <div class="row" ng-repeat='data in content[2]'> 
        <p class="pull-left">{{data[0]}}<p> 
        <input data-toggle='tooltip' title ='{{data[1]}} hours per page' ng-model='data[2]' type='number' min=0 class='form-control numberInput pull-right'> 
        </div> 

       </div> 

        <div class="container"> 

        <h4>{{languageData[0]}}</h4> 

        <div class="row" > 
        <p class="pull-left">{{languageData[1][0][0]}}<p> 
        <input data-toggle='tooltip' title ='{{languageData[1][0][1]}} hours per page' ng-model='languageData[1][0][2]' type='number' min=0 class='form-control numberInput pull-right'> 
        </div> 

        </div> 
     </div> 

JS的用於提取的用於languageData代碼文件:

$scope.getLangData = function(){ 
      var langData = []; 
      var langPanel = Parse.Object.extend("Panel"); 

      var langpanelObject = new Parse.Query(langPanel); 

      langpanelObject.equalTo('editable',false); 
      langpanelObject.find({ 
       success:function(results) 
       { 
        for (var i = 0; i < results.length; i++) { 
          langData.push(results[i].get("title"),[],results[i].id); 
        }; 

        for (var i = 0; i < $scope.fetchedRows.length; i++) { 
         if ($scope.fetchedRows[i][3]== langData[2]) { 
          langData[1].push($scope.fetchedRows[i]); 
         } 
        }; 
       }, 
       error:function(error) 
       { 
        alert("Error: "+ error.code + " " +error.message); 
       } 
      }); 
      $scope.languageData = langData; 
      $scope.$apply(); 
} 

我想這是導致該錯誤的js代碼因爲我有一個按鈕,那就點擊getLangData()函數(這是網站上的Reset按鈕),並且數據再次消失。但是,我不知道如何以及爲什麼它會影響ng綁定的可見性。

+0

爲什麼'$ scope。$ apply();'它在控制檯中拋出錯誤。你不需要使用'$ scope。$ apply();''因爲範圍在控制器中被自動消化 –

+0

我使用它,因爲在獲取數據之前加載了綁定到html的ng。因此,在可以顯示數據後,我認爲我應該使用$ apply,以便更新綁定。 你有什麼錯誤?我從控制檯沒有錯誤。我試圖刪除代碼中的應用,但問題仍然存在。 –

回答

3

$scope.$apply()正在解析異步調用之前運行。

由於解析庫是出了角度線,你必須運行$apply的範圍,但正確的方法是這樣的:

langpanelObject.find({ 
    success: function(results) { 
     for (var i = 0; i < results.length; i++) { 
      langData.push(results[i].get("title"),[],results[i].id); 
     }; 

     for (var i = 0; i < $scope.fetchedRows.length; i++) { 
      if ($scope.fetchedRows[i][3]== langData[2]) { 
       langData[1].push($scope.fetchedRows[i]); 
      } 
     }; 

     $scope.$apply(function() { 
      $scope.languageData = langData; 
     }); 
    }, 
    error: function(error) { 
     alert("Error: "+ error.code + " " +error.message); 
    } 
}); 

這是一個很好的做法是使用$apply傳遞功能一個參數,而不僅僅是$scope.$apply()

+0

感謝您的回答。 是'$ scope。$ apply(...)'還是'$ scope.apply()'? –

+0

這是'$ scope。$ apply(...)',對不起,這是一個錯字,我要解決這個問題。 – jjimenez

-1

問題是因爲Javascript執行範圍。$ apply()在我的languageData被更新之前。 解決方法是通過setTimeOut()延遲$ apply()函數。

setTimeout(function(){ $scope.$apply();}, 500); 
+0

僅僅推遲一些代碼是不合理的。請看我的解決方案。 – jjimenez