首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >md-autocomplete不起作用

md-autocomplete不起作用
EN

Stack Overflow用户
提问于 2015-03-09 17:10:38
回答 2查看 5.9K关注 0票数 2

我尝试使用angular material的md-autocomplete,我指定的指令如下

代码语言:javascript
复制
  <md-autocomplete
    md-selected-item="mainctrl.selectedItem"
    md-search-text="mainctrl.search_term"
    md-items="item in mainctrl.search(mainctrl.search_term)"
    md-item-text="item"
    md-delay="500"
    md-min-length="4"
    placeholder="Type to search">
    <span md-highlight-text="mainctrl.search_term">{{item}}</span>
  </md-autocomplete>

在控制器中,我定义了如下搜索函数

代码语言:javascript
复制
this.search = function(term){
  var result = [];
  Search.findValues(term,this.details.data,result).then(function(res){
    console.log(res);
    return res;
  });
};

搜索服务如下所示:

代码语言:javascript
复制
  .service('Search',function($q){
    var self = this;
    var deferred;

   self.findValues = function(term,obj,result){

  //if(!deferred){
    deferred = $q.defer();
  //}
  if(typeof obj === 'object'){
    angular.forEach(obj,function(v,k){
      self.findValues(term,v,result)
    });
    deferred.resolve(result);
  } else{

    if(typeof obj!='number'&& typeof obj!='boolean'){
      var res = obj.search(term);
      if(res!=-1){
        result.push(obj);
      }
    }
  }
  return deferred.promise;
} ;
return self ;

});

我得到了想要的结果,但由于某种原因,我得到了以下错误,

代码语言:javascript
复制
 TypeError: Cannot read property 'length' of undefined
at g (angular-material.min.js:271)
at r (angular-material.min.js:271)
at processQueue (angular.js:13189)
at angular.js:13205
at Scope.$get.Scope.$eval (angular.js:14401)
at Scope.$get.Scope.$digest (angular.js:14217)
at Scope.$get.Scope.$apply (angular.js:14506)
at angular.js:16232
at completeOutstandingRequest (angular.js:4905)
at angular.js:5285
EN

回答 2

Stack Overflow用户

发布于 2015-03-13 18:46:56

搜索函数实际上返回未定义的,所以只需将其封装在promise中即可。

我简化了功能,并使用angular的$filter作为搜索服务。

代码语言:javascript
复制
search ( term ) {
  var q = this.$q.defer();
  this.findValues( term, this.data ).then( function ( res ) {
    q.resolve( res );
  } );
  return q.promise;
}

findValues ( term, obj ) {
  var deferred = this.$q.defer();
  deferred.resolve( this.$filter( 'filter' )( obj, term ) );
  return deferred.promise;
}

我发现这篇关于promises的文章非常有帮助:http://www.html5rocks.com/en/tutorials/es6/promises

您可能还想查看您的搜索服务,因为您的承诺永远不会解决或拒绝如果obj ==='undefined'

票数 4
EN

Stack Overflow用户

发布于 2015-07-21 19:10:20

如果你仍然得到这个错误,尝试更新你的角度材料,这个错误将会消失。(我将我的更新为0.9.8)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28938365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档