typeahead不返回值

时间:2015-06-30 06:13:31

标签: angularjs angular-ui-bootstrap

我有一个bootstrap typeahead

    <input type="text" ng-model="selected" ng-change="invalid_tickr=false" typeahead="tickr for tickr in tickrValues($viewValue)" class="form-control" required autofocus>

controller.js

    $scope.tickrValues = function(val) {   
      var url = // some url
      $ajax.get(url).success(function(data, status, headers, config) {
        console.log(data);
        return data.map(function(item) {
            console.log(item);
            console.log(item.value);
            return item.value;
        });
    });
   }

此函数正确地将item.value打印到控制台,但它没有返回值。

3 个答案:

答案 0 :(得分:2)

你错过了使用.get()获取数组。如果您在地图中有一些数组的集合,假设您想要获取集合中的所有数组值,请使用.get()方法

base64_decode

答案 1 :(得分:1)

在Angular中,我建议你在工厂而不是控制器中调用你的ajax,这样你就不需要重新运行角度摘要,也不需要让代码看起来更整洁和可维护。

因此,使用ajax调用的角度工厂将如下所示:

angular.module('myApp.factory',[])
       .factory('restCall',['$http',function($http) {
           return {
                factoryCall: function(url) {
                   return $http.get(url);
                }
           }
}]); 

angular.module('myApp',[])
       .controller('myApp.controller',['restCall','$scope', function(restCall,$scope) {
         $scope.tickrValues = function(val) { 
           restCall.factoryCall(url).then(function(data) {
               return data.map(function(item) {
                  console.log(item);
                  console.log(item.value);
                  return item.value;
              });
           });
         }
}]);

答案 2 :(得分:0)

你应该在 $ ajax.get

之前加上return语句

这是更新代码。

var url = // some url
     return  $ajax.get(url).success(function(data, status, headers, config) {
        console.log(data);
        return data.map(function(item) {
            console.log(item);
            console.log(item.value);
            return item.value;
        });
    });
   }

希望这项工作。