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
在javascript承诺中放置http get调用的位置_Javascript_Angularjs_Angular Ui Typeahead - Fatal编程技术网

在javascript承诺中放置http get调用的位置

在javascript承诺中放置http get调用的位置,javascript,angularjs,angular-ui-typeahead,Javascript,Angularjs,Angular Ui Typeahead,我正在使用Elasticsearch和AngularJS构建一个小型搜索应用程序。我正在尝试使用Angular UI引导程序Typeahead来实现一个自动完成功能,它使用http.get调用来获得异步结果,但我不确定将它放在哪里?。。。。仍在学习音阶和角度 我将把这个http.get调用放在这个js承诺代码中的什么地方 http.get代码: return $http.get('localhost:9200/bigtestindex/doc/_search', { params:

我正在使用Elasticsearch和AngularJS构建一个小型搜索应用程序。我正在尝试使用Angular UI引导程序Typeahead来实现一个自动完成功能,它使用http.get调用来获得异步结果,但我不确定将它放在哪里?。。。。仍在学习音阶和角度

我将把这个http.get调用放在这个js承诺代码中的什么地方

http.get代码:

return $http.get('localhost:9200/bigtestindex/doc/_search', {
      params: {
        "query": {
          "match": {
            "content.autocomplete": {
              "query": query,
              "default_operator": "and"
            }
          }
        }
      }
    }),
Javascript承诺代码:

this.getSuggestions = function(query) {
  var deferred = $q.defer();

  var terms = query.split(' '),
      baseTerms = terms.length === 1 ? '' : terms.slice(0, -1).join(' ') + ' ',
      lastTerm = terms[terms.length - 1].toLowerCase();

  esClient.search({
    index: 'bigtestindex',
    body: {
      "query": {
        "simple_query_string": {
          "fields": ['title'],
          "query": baseTerms + '(' + lastTerm + '|' + lastTerm + '*)',
          "default_operator": "and"
        }
      },
      "suggest": {
        "text": query,
        "phraseSuggestion": {
          "phrase": {
            "field": "title",
            "direct_generator": [{
              "field": "title",
              "suggest_mode": "popular",
              "min_word_length": 3,
              "prefix_length": 2
            }]
          }
        }
      },
      "size": 5,
      "_source": ["content"]
    }
  }).then(function(es_return) {
    deferred.resolve(es_return);
  }, function(error) {
    deferred.reject(error);
  });

  return deferred.promise;
};

我很确定在身体的某个地方,只是不确定在哪里。。。我无法让它工作。

我想,您的控制器代码可能如下所示:

function searchController(esClient)
{
     var ctl = this;
     ctl.suggestions = [];

     this.getSuggestions = function(query) {
         var terms = query.split(' '),
         baseTerms = terms.length === 1 ? '' : terms.slice(0, -1).join(' ') + ' ',
         lastTerm = terms[terms.length - 1].toLowerCase();

         esClient.search({
             index: 'bigtestindex',
             body: {
               "query": {
                 "simple_query_string": {
                   "fields": ['title'],
                   "query": baseTerms + '(' + lastTerm + '|' + lastTerm + '*)',
                   "default_operator": "and"
                 }
               },
               "suggest": {
                 "text": query,
                 "phraseSuggestion": {
                   "phrase": {
                     "field": "title",
                     "direct_generator": [{
                       "field": "title",
                       "suggest_mode": "popular",
                       "min_word_length": 3,
                       "prefix_length": 2
                     }]
                   }
                 }
               },
               "size": 5,
               "_source": ["content"]
             }
           }, function(err, es_return) {
               if(err) {
                  //Handle error or do nothing
                  return;
               }
               ctl.suggestions = es_return;
           });
       };
}

我想,您的控制器代码可能如下所示:

function searchController(esClient)
{
     var ctl = this;
     ctl.suggestions = [];

     this.getSuggestions = function(query) {
         var terms = query.split(' '),
         baseTerms = terms.length === 1 ? '' : terms.slice(0, -1).join(' ') + ' ',
         lastTerm = terms[terms.length - 1].toLowerCase();

         esClient.search({
             index: 'bigtestindex',
             body: {
               "query": {
                 "simple_query_string": {
                   "fields": ['title'],
                   "query": baseTerms + '(' + lastTerm + '|' + lastTerm + '*)',
                   "default_operator": "and"
                 }
               },
               "suggest": {
                 "text": query,
                 "phraseSuggestion": {
                   "phrase": {
                     "field": "title",
                     "direct_generator": [{
                       "field": "title",
                       "suggest_mode": "popular",
                       "min_word_length": 3,
                       "prefix_length": 2
                     }]
                   }
                 }
               },
               "size": 5,
               "_source": ["content"]
             }
           }, function(err, es_return) {
               if(err) {
                  //Handle error or do nothing
                  return;
               }
               ctl.suggestions = es_return;
           });
       };
}

如果我理解正确,您使用的是elasticSearch JS客户端,您不需要发出$http调用,因为客户端会为您执行此操作!如果我理解正确,您使用的是elasticSearch JS客户端,您不需要发出$http调用,因为客户端会为您执行此操作!答案不完全是我想要的,但会接受它,因为它仍然适用答案不完全是我想要的,但会接受它,因为它仍然适用