Javascript Angularjs错误:[filter:notarray]应为数组,但收到:{}且筛选器位于ng重复上
我正试图使用ng repeat指令,通过对API的角度请求来填充html表。html页面首先加载,然后请求获取返回响应时填充表的数据。 当我将过滤器添加到ng repeat指令时,会填充表格并执行过滤器功能,但在我的chrome浏览器控制台中,我收到以下错误: 错误:[筛选器:notarray]应为数组,但收到:{} at REGEX_STRING_REGEXP(angular.js:68) 在angular.js:18251 在Object.fn(app.js:185) at Scope.$get.Scope.$digest(angular.js:15683) 范围为$get.Scope.$apply(angular.js:15951) 在bootstrapApply(angular.js:1633) 在Object.invoke(angular.js:4450) 在doBootstrap(angular.js:1631) 在引导时(angular.js:1651) 在angularInit(angular.js:1545) 我在plunker上设置了一个示例,在运行示例时,控制台中也会显示错误: ? html:Javascript Angularjs错误:[filter:notarray]应为数组,但收到:{}且筛选器位于ng重复上,javascript,angularjs,angularjs-ng-repeat,Javascript,Angularjs,Angularjs Ng Repeat,我正试图使用ng repeat指令,通过对API的角度请求来填充html表。html页面首先加载,然后请求获取返回响应时填充表的数据。 当我将过滤器添加到ng repeat指令时,会填充表格并执行过滤器功能,但在我的chrome浏览器控制台中,我收到以下错误: 错误:[筛选器:notarray]应为数组,但收到:{} at REGEX_STRING_REGEXP(angular.js:68) 在angular.js:18251 在Object.fn(app.js:185) at Scope.$g
<!DOCTYPE html>
<html>
<head>
<script data-require="angular.js@*" data-semver="1.4.3" src="https://code.angularjs.org/1.4.3/angular.js"></script>
<script data-require="angular-route@*" data-semver="1.4.3" src="https://code.angularjs.org/1.4.3/angular-route.js"></script>
<script data-require="angular-resource@*" data-semver="1.4.3" src="https://code.angularjs.org/1.4.3/angular-resource.js"></script>
<script type="text/javascript" src="example.js"></script>
<link href="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.0/css/bootstrap-combined.min.css" rel="stylesheet" />
</head>
<body ng-app="inventoryManagerApp">
<h3>Sample - Expected array error</h3> Filter
<input type="text" id="quoteListFilter" class="form-control" ng- model="search" />
<div ng-controller="QuoteController">
<table class="table table-bordered">
<tbody>
<tr>
<th>Specification</th>
<th>Quantity</th>
</tr>
<tr ng-repeat="quote in quotes | filter:search">
<td>{{quote.SpecificationDetails}}</td>
<td>{{quote.Quantity}}</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
这似乎与填充ng repeat指令的数据有关,在页面加载时,该指令不立即可用。当我在页面加载时用json数据替换$scope.quotes而不是从API请求数据时,不会得到错误
$scope.quotes = quoteRepository.getQuoteList().$promise.then(
这个作业没用。只需从行中删除$scope.quotes=
,即可解决您的问题
promise.then返回的对象对repeat语句无效。此赋值存在问题:
$scope.quotes = quoteRepository.getQuoteList().$promise.then(
function (result) {
$scope.quotes = result;
},
function () {
}
);
函数.then()
返回另一个允许链接的承诺对象:.then().then()
,因为它返回一个对象,所以接收notarray
错误
为了避免引用错误,您可以在前面将$scope.quotes
指定为空arrray,然后将结果分配给它
$scope.quotes = [];
quoteRepository.getQuoteList().$promise.then(
function (result) {
$scope.quotes = result;
},
function () {
}
);
$http legacy promise方法.success和.error已被弃用,将在Angular v1.6.0中删除。使用标准。然后使用方法 Now.then方法返回包含多个元素的对象:数据、状态等,所以您需要使用response.data,而不仅仅是response:
$http.get('https://example.org/...')
.then(function (response) {
console.log(response);
var data = response.data;
var status = response.status;
var statusText = response.statusText;
var headers = response.headers;
var config = response.config;
console.log(data);
});
这很有用
$http.get('https://example.org/...')
.then(function (response) {
console.log(response);
var data = response.data;
var status = response.status;
var statusText = response.statusText;
var headers = response.headers;
var config = response.config;
console.log(data);
});
quoteRepository.getQuoteList().then(
function (result) {
$scope.quotes = result;
},
function () {
}
);