加载时不显示角度数据

加载时不显示角度数据

问题描述:

加载时未显示的ng-binding使用范围内的数组中的数据。

该数组从另一个数组获取数据(我们称它们为A)。

的NG结合这是已经装上显示从阵列A.使用数据

Data doesn't showData 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,以便更新绑定。 你有什么错误?我从控制台没有错误。我试图删除代码中的应用,但问题仍然存在。 –

$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

问题是因为Javascript执行范围。$ apply()在我的languageData被更新之前。 解决方法是通过setTimeOut()延迟$ apply()函数。

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

仅仅推迟一些代码是不合理的。请看我的解决方案。 – jjimenez