【问题标题】:Unable to get the value from an array of object in md-autocomplete无法从 md-autocomplete 中的对象数组中获取值
【发布时间】:2018-05-25 21:29:23
【问题描述】:

我有一个对象数组,现在我正在尝试选择数据。随附的文件是我在控制台中获取的对象的快照。

即使用户通过自动完成对象中的 empid 或 empname 或 emailid 搜索,我也想获取 emailid。 但是当我开始输入md-autocomplete 时,我无法检索到这个,我的屏幕闪烁并且从未给我过滤项目列表。
更新代码:

<md-autocomplete flex required
                                md-search-text="searchText"
                                md-input-name="autocomplete"
                                md-search-text-change="searchTextChange(searchText)"
                                md-items="item in search(searchText)"
                                md-item-text="item"
                                md-floating-label="Reporting Manager">
                                    <md-item-template>
                                        <span md-highlight-text="searchText" md-highlight-flags="^i">{{item.empname}}</span>
                                    </md-item-template>
                                </md-autocomplete>

这是我的 javascript search() 函数

$scope.search = function(text){
    var deferred = $q.defer()
    var result = []
    var resolve = function(reportingManager){
      //console.log(reportingManager)
      angular.forEach(reportingManager,function(val){
        //console.log(val)
        angular.forEach(val,function(value){
          //console.log(value)
          if(value.empid.toUpperCase().includes(text.toUpperCase())
            || value.empname.toUpperCase().includes(text.toUpperCase())){
            result.push(value.empname)
            //console.log(result)
          }
        })
      })
      deferred.resolve(result)
    }
    if(text){
      resolve(reportingManager? reportingManager: [])
    }else{
      resolve([]);
    }
    return deferred.promise
  }

reportingManager 是一个数组数组,其中包含我在快照中包含的对象。 对此的任何帮助都将非常可观
问候

【问题讨论】:

  • 看来valObject,如果是这样的话,就没有val.indexOf函数了。
  • @Titus 我正在尝试查看数组中的每个对象
  • 您必须使用如下条件:val.empid.toUpperCase().indexOf(text.toUpperCase()) != -1 || val.emailid.toUpperCase().indexOf(text.toUpperCase()) != -1
  • @Titus 我试过但还是同样的问题
  • 似乎angular.forEach()在调试时没有执行

标签: javascript arrays angularjs autocomplete


【解决方案1】:

首先,我要感谢 @Titus 一直陪在我身边,陪我一起解决我的问题。

问题不仅在于 Javascript 代码,还在于 CSS。由于经过多次试验后,我试图将md-autocomplete 置于模态弹出窗口中,因此出现了自动完成建议,但它落后于模态。这是工作代码

$scope.search = function(text){
        var deferred = $q.defer()
        var result = []
        var resolve = function(reportingManager){
          //console.log(reportingManager)
          angular.forEach(reportingManager,function(val){
            //console.log(val)
            angular.forEach(val,function(value){
              //console.log(value)
              if(value.empid.toUpperCase().includes(text.toUpperCase())
                || value.empname.toUpperCase().includes(text.toUpperCase())){
                result.push(value.emailid)
                //console.log(result)
              }
            })
          })
          deferred.resolve(result)
        }
        if(text){
          resolve(reportingManager? reportingManager: [])
        }else{
          resolve([]);
        }
        return deferred.promise
      }

HTML:

<div class="md-virtual-repeat-container">
                                    <md-autocomplete flex required
                                    md-search-text="searchText"
                                    md-input-name="autocomplete"
                                    md-search-text-change="searchTextChange(searchText)"
                                    md-items="item in search(searchText)"
                                    md-item-text="item"
                                    md-selected-item="selectedManager"
                                    md-floating-label="Reporting Manager">
                                    <md-item-template>
                                        <span md-highlight-text="searchText" md-highlight-flags="^i">{{item}}</span>
                                    </md-item-template>
                                </md-autocomplete>
                                </div>

Psst **如果您尝试在弹出窗口中获取自动完成功能,请不要忘记为 z-index 设置高值

还要在你的控制器中包含$q

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    • 2015-08-14
    • 1970-01-01
    • 2013-09-27
    • 2021-05-19
    • 1970-01-01
    相关资源
    最近更新 更多