【问题标题】:AngularJs Filter: Generating notArray errorsAngularJs 过滤器:生成 notArray 错误
【发布时间】:2019-08-11 19:26:22
【问题描述】:

我的 angularJS 项目中的过滤器有问题。

我们有一个简单的草稿功能,允许用户将大型表单的内容作为 JSON 字符串保存在我们的数据库中。然后,他们可以转到网站的某个部分来显示并继续处理这些表格。我想在该页面上为他们提供一个过滤器,以按他们保存草稿的日期进行过滤。

这是我的标记:

<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>

还有我的 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;
         };
       }
     ]);
})();

现在,过滤器起作用了。但是每当加载页面时,都会出现 20-50 个错误,所有错误的内容都是 Error: [filter:notarray] Expected array but received: {}

在这里我需要做的就是为父对象savedOn: xxData Herexx 值提供一个简单的字符串值过滤器。

我做错了什么?

【问题讨论】:

    标签: javascript angularjs angularjs-ng-repeat angularjs-filter angularjs-material


    【解决方案1】:

    原来,我遇到了与this post类似的问题

    基本上,我的 ng-repeat 和过滤器在关联模型加载之前就已初始化。将模型初始化为空白数组,然后将过滤器创建为承诺链的一部分就可以了:

    //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);
      });
    };
    

    非常基本,但我会把它留在这里以防将来对某人有所帮助:)

    【讨论】:

      猜你喜欢
      • 2015-10-09
      • 2016-09-19
      • 1970-01-01
      • 2014-05-03
      • 2020-12-27
      • 2016-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多