Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs md自动完成不起作用_Angularjs_Angular Services_Angular Material - Fatal编程技术网

Angularjs md自动完成不起作用

Angularjs md自动完成不起作用,angularjs,angular-services,angular-material,Angularjs,Angular Services,Angular Material,我试图使用angular material的md autocomplete,我指定了如下指令 <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-de

我试图使用angular material的md autocomplete,我指定了如下指令

  <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>
搜索服务如下所示:

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

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

 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

搜索函数实际上返回undefined,所以只需将其包装在一个promise中

我简化了函数,并使用angular的$filter作为搜索服务

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;
}
我发现这篇关于承诺的文章非常有用:


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

如果您仍然收到此错误,请尝试更新您的角度材质,此错误将消失。(我将我的1更新为0.9.8)

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