【发布时间】:2015-10-06 07:41:32
【问题描述】:
加载时未显示的 ng-binding 使用范围内数组中的数据。
该数组从另一个数组(我们称它们为 A)中获取数据。
加载时已经显示的 ng-binding 使用来自数组 A 的数据。
以下是显示真正奇怪的数据的几种方法:
- 聚焦然后不聚焦任何输入
- 更改任何输入的值
你可以试试here这个bug。
这里我提供了一些我的代码:
<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>
获取languageData的js代码文件:
$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-binding 的可见性。
【问题讨论】:
-
为什么
$scope.$apply();在控制台中抛出错误。您无需使用$scope.$apply();',因为范围会在控制器中自动消化 -
我使用它是因为 ng 绑定到 html 是在获取数据之前加载的。因此,在可以显示数据之后,我认为我应该使用 $apply 以便更新绑定。你有什么错误?我没有来自控制台的错误。我试图在代码中删除 apply 但问题仍然存在。
标签: javascript jquery arrays angularjs parse-platform