使用angularjs中的typeahead将参数从控制器传递给服务

使用angularjs中的typeahead将参数从控制器传递给服务,angularjs,Angularjs,从SO 在控制器中有一个paramcityName,我不确定它是如何工作的 我想做的是我有一个myController.js文件 var app = angular.module("sampleApp"); app.controller('TypeaheadCtrl',['$scope','search', function ($scope, search) { $scope.displayed=[]; search.getResult(searchQuery)

SO

在控制器中有一个param
cityName
,我不确定它是如何工作的

我想做的是我有一个
myController.js
文件

var app = angular.module("sampleApp");

app.controller('TypeaheadCtrl',['$scope','search', function ($scope, search) {
   $scope.displayed=[];
    search.getResult(searchQuery)
          .then(function (data) {
              $scope.displayed = (data.records);
          });

}]);
myService.js

angular.module('sampleApp').factory('search', ['$q', '$http', function ($q, $http) {
    var sdo = {
        getResult: function (searchQuery) {
            var promise = $http({
                method: 'GET',
                url: 'http://somewhere.com'
                params: {
                    q: "a"
                }
            });
            promise.success(function (data, status, headers, conf) {
                return data;
            });

            return promise;
        }
    }
    return sdo;
}]);

我希望能够在typeahead框中键入第三个字符后调用服务,并将字符传递给服务

您应该使用
typeahead
输入元素上的
typeahead min length=“3”
选项

HTML

<input type="text" ng-model="result" 
  typeahead="suggestion for suggestion in getSuggestion($viewValue)" 
  typeahead-min-length="3"/>
由于使用了
.success
功能,数据将获得return
getResult
功能。 使用
。然后
链接promise,以便可以从成功回调返回数据

服务

angular.module('sampleApp').factory('search', ['$q', '$http', function($q, $http) {
  var sdo = {
    getResult: function(searchQuery) {
      var promise = $http({
        method: 'GET',
        url: 'http://somewhere.com'
        params: {
          q: searchQuery //<-- pass parameter here
        }
      });
      promise.then(function(response) {
        //you could format data here and returned formatted result
        //or you could also do some sort of validation or filtering on data
        return response.data;
      });
      return promise;
    }
  }
  return sdo;
}]);
angular.module('sampleApp').factory('search',['$q','$http',函数($q,$http){
变量sdo={
getResult:函数(searchQuery){
var promise=$http({
方法:“GET”,
网址:'http://somewhere.com'
参数:{

q:searchQuery/您应该在
typeahead
输入元素上使用
typeahead min length=“3”
选项

HTML

<input type="text" ng-model="result" 
  typeahead="suggestion for suggestion in getSuggestion($viewValue)" 
  typeahead-min-length="3"/>
由于使用了
.success
功能,数据将获得return
getResult
功能。 使用
。然后
链接promise,以便可以从成功回调返回数据

服务

angular.module('sampleApp').factory('search', ['$q', '$http', function($q, $http) {
  var sdo = {
    getResult: function(searchQuery) {
      var promise = $http({
        method: 'GET',
        url: 'http://somewhere.com'
        params: {
          q: searchQuery //<-- pass parameter here
        }
      });
      promise.then(function(response) {
        //you could format data here and returned formatted result
        //or you could also do some sort of validation or filtering on data
        return response.data;
      });
      return promise;
    }
  }
  return sdo;
}]);
angular.module('sampleApp').factory('search',['$q','$http',函数($q,$http){
变量sdo={
getResult:函数(searchQuery){
var promise=$http({
方法:“GET”,
网址:'http://somewhere.com'
参数:{

q:searchQuery/像这样更改您的服务

app.factory('search', ['$q', '$http', function($q, $http) {
  var sdo = {};
  sdo.getResult = function(query) {
    var deferred = $q.defer();
    var url = "http://someurlpath/api/" + query;
    $http.get(url)
      .success(function(data) {
        deferred.resolve(data.data);
      }).error(function(msg, code) {
        deferred.reject(msg);
      });
    return deferred.promise;
  };
  return sdo;
}]);

像这样改变你的服务

app.factory('search', ['$q', '$http', function($q, $http) {
  var sdo = {};
  sdo.getResult = function(query) {
    var deferred = $q.defer();
    var url = "http://someurlpath/api/" + query;
    $http.get(url)
      .success(function(data) {
        deferred.resolve(data.data);
      }).error(function(msg, code) {
        deferred.reject(msg);
      });
    return deferred.promise;
  };
  return sdo;
}]);