【发布时间】:2017-03-29 01:11:07
【问题描述】:
我在 AngularJS 中调用我的 Firebase 数据库 JSON 并尝试过滤代码。我不断看到数组错误,例如:
Error: [filter:notarray] http://errors.angularjs.org/1.4.9/filter/notarray?
我的 HTML:
<form>
<div class="form-group">
<div class="input-group">
<div class="input-group-addon"><i class="fa fa-search"></i></div>
<input type="text" class="form-control" placeholder="Search" ng-model="searchTranslation">
</div>
</div>
</form>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>ID</th>
<th>English</th>
<th>Arabic</th>
<th>Status</th>
<th>Settings</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="i in translations | filter:searchTranslation track by $index">
<td>{{$index}}</td>
<td>{{i.transNameEn}}</td>
<td class="textarabic">{{i.transNameArabic}}</td>
<td class="{{i.transStatus}}">{{i.transStatus}}</td>
<td>
<a ng-href="{{url}}pages-edit-translation/{{i.transId}}"
class="btn caps btn-warning">
EDIT
</a>
</td>
</tr>
</tbody>
</table>
我的 JS 代码
// @pages-home-translation
cmsApp.controller('pages-home-translation', function ($scope, $http) {
$scope.sortType = 'English'; // set the default sort type
$scope.sortReverse = false; // set the default sort order
$scope.searchTranslation = ''; // set the default search/filter term
$http.get(firebase_url+'cms/translations.json'+randstatus).success(function(data) {
$scope.translations=data; // or data.data
});
});
我的 JSON:
{
"00hym5km2tf08s38fr-ivjgnsw6": {
"notes": "",
"transCreation": "11/15/2016, 4:14:07 PM",
"transId": "00hym5km2tf08s38fr-ivjgnsw6",
"transModified": "11/15/2016, 4:14:07 PM",
"transNameArabic": "استخدم كعنوان الدفع الافتراضي",
"transNameEn": "Use as my default billing address",
"transStatus": "FIXED"
},
"08zq3t9411zaketnpnwmi-ivjhzz5q": {
"notes": "",
"transCreation": "11/15/2016, 4:51:35 PM",
"transId": "08zq3t9411zaketnpnwmi-ivjhzz5q",
"transModified": "11/15/2016, 4:51:35 PM",
"transNameArabic": "احذية كرة القدم",
"transNameEn": "Football Shoes",
"transStatus": "FIXED"
},
"0aoycw0b0c9v8ov6xbt9-ivjhwnv6": {
"notes": "",
"transCreation": "11/15/2016, 4:49:00 PM",
"transId": "0aoycw0b0c9v8ov6xbt9-ivjhwnv6",
"transModified": "11/15/2016, 4:49:00 PM",
"transNameArabic": "جينز واسع",
"transNameEn": "Flared Jeans",
"transStatus": "FIXED"
}
}
注意:如果我删除
<tr ng-repeat="i in translations | filter:searchTranslation track by $index">
这样做反而会起作用:
<tr ng-repeat="i in translations">
但显然我希望使用搜索表单过滤结果。使用data.data 在控制台中显示没有错误。
我尝试在http.get 上执行setTimeOut 并且还延迟,以便它首先加载JSON,但它仍然无法正常工作。
谢谢
【问题讨论】:
-
附加 JSON 一次。
-
如何以及为什么会加载两次?
-
看起来你得到的数据不是一个数组。 ng-repeat 需要一个数组来重复。首先检查数据是否为数组。如果不是,则将其转换为数组并使用。
-
我该怎么做@suzo
-
使用
data.data,它将包含数据。传递给success回调的对象是response对象,其中包含您所追求的data属性。
标签: angularjs json firebase firebase-realtime-database