简体   繁体   English

AngularJs Filter:生成notArray错误

[英]AngularJs Filter: Generating notArray errors

I'm having an issue with a filter in my angularJS project. 我的angularJS项目中有一个过滤器问题。

We have a simple draft feature that allows users to save the contents of a large form as a JSON string in our database. 我们有一个简单的草稿功能,允许用户将大型表单的内容保存为数据库中的JSON字符串。 They then can go to a section of the site to display and continue working on these forms. 然后,他们可以访问网站的某个部分以显示并继续处理这些表单。 I want to provide them a filter on that page to filter by the date they saved the draft on. 我想在该页面上为他们提供一个过滤器,以便按照他们保存草稿的日期进行过滤。

Here is my markup: 这是我的标记:

<div ng-controller="savedFormCtrl" ng-cloak id="saved-form-wrapper"
  class="border border-dark border-top-0 border-right-1 border-bottom-1
  border-left-1 px-0" ng-init="getSavedForms()"
>
  <!-- Search filters -->
  <form name="savedFormsFilterWrapper" layout="row" flex="35" layout-align="end center" class="toolbar-search">

    <!-- Date filter -->
    <md-input-container flex="80">
      <div class="text-light font-weight-bold float-left">Filter by saved date:</div>
      <md-tooltip style="font-size:1em;">Filter your saved HRTF's</md-tooltip>

      <md-datepicker name="dateFilter" class="hrtf-date savedFilterDatepicker"
       md-date-locale="myLocale" data-ng-model="savedFormFilters" ng-blur="setFilterDate()"
       md-placeholder="" md-open-on-focus 
       aria-label="Saved forms date filter">
      </md-datepicker>
    </md-input-container>

  </form>

  <!-- Saved forms body -->
  <div id="savedFormAcc" class="accordion col-md-12 pt-3">

  <!-- Accordion item Header -->
  <div class="card" ng-repeat="item in savedForms | filter:savedFormFilters">

    <div class="card-header savedFormItem" id="savedForm{{$index}}" data-toggle="collapse" data-target="#collapse{{$index}}">
      <md-button class="md-raised md-primary" data-toggle="collapse"
       data-target="#collapse{{$index}}" aria-expanded="false" 
       aria-controls="collapse{{index}}"
      >
        Form Saved on {{ item.savedOn }} - Click to expand
      </md-button>
    </div>

    <!-- Accordion body continues on below  -->

  </div>

</div>

And my JS: 我的JS:

(function () {
  'use strict';
  angular.module('hrtf')
    .controller('savedFormCtrl', ['$scope', '$window', 'formService',
      function savedFormCtrl($scope, $window, formService) {

        $scope.savedFormFilters = '';

        //Get users's saved forms
        $scope.savedForms = {};
        $scope.getSavedForms = function(){

          formService.getSavedForms()
          .then(saved => {
            saved.forEach( item =>{
              item.data_json = JSON.parse(item.data_json);
            });
            $scope.savedForms = saved;
            return $scope.savedForms;
         };
       }
     ]);
})();

Now, the filter works. 现在,过滤器工作。 But whenever The page is loaded, anywhere from 20-50 errors appear, all with the contents Error: [filter:notarray] Expected array but received: {} 但无论何时加载页面,都会出现20-50个错误,所有内容都有错误:[filter:notarray]预期数组但收到:{}

All I need to do here is provide a simple filter on a string value to the parent objects savedOn: xxData Herexx value. 我需要做的就是为父对象savedOn:xxData Herexx值提供一个字符串值的简单过滤器。

What am I doing wrong? 我究竟做错了什么?

Turns out, I had a similar issue to this post 事实证明,我在这篇文章中遇到了类似的问题

Basically, my ng-repeat and filter were initializing before the associated model could load. 基本上,我的ng-repeat和过滤器在相关模型加载之前进行了初始化。 Initializing the model as a blank array and then creating the filter as part of the promise chain did the trick: 将模型初始化为空白数组,然后将过滤器作为promise链的一部分创建,可以实现:

//Get users's saved forms
$scope.savedForms = [];
$scope.getSavedForms = function(){
  formService.getSavedForms()
  .then(saved => {
    //Convert and format items here

    $scope.savedForms = saved;
    $scope.savedFormFilters = { savedOn: ''};
    return $scope.savedForms;

  }).catch(e => { console.error(e);
  });
};

Pretty basic, but I'll leave it here in case it helps someone in the future :) 非常基本,但我会留在这里,以防它将来帮助某人:)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM