Javascript Angularjs错误:[filter:notarray]应为数组,但收到:{}且筛选器位于ng重复上

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

我正试图使用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:

<!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 () {
    }
);