无法从md-autocomplete中的对象数组获取值 [英] Unable to get the value from an array of object in md-autocomplete

查看:41
本文介绍了无法从md-autocomplete中的对象数组获取值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

即使用户通过自动完成对象中的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是一个数组数组,其中包含我包含在快照中的对象. 在此方面的任何帮助将非常可观
问候

解决方案

首先,我要感谢@ 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包含在您的控制器中

I have an array of objects, and Now I am trying to select the data. Enclosed file is a snapshot of the object I am getting in console.

I want to get the emailid even if user search by the empid or empname or emailid from the object in autocomplete. But I am unable to retrieve this one when I start typing in md-autocomplete my screen blinks and never gave me list of filter items.
Updated code :

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

And this is my javascript search() function

$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 is an array of arrays which has the objects which i have included in the snapshot. Any help on this one would be highly appreciable
Regards

解决方案

First of all I would like to thank @Titus for being there for me and walking with me to solve my problem.

The issue was not only with Javascript code it was also with CSS. Since I was trying to put the md-autocomplete in a modal pop up after so many trials the autocomplete suggestions were coming up but it was behind the modal. Here is the working code

$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 **In case you are trying to get the autocomplete in a pop up don't forget to set the high value for z-index

And also include the $q in your controller

这篇关于无法从md-autocomplete中的对象数组获取值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆