Angular - 在输入

时间:2016-05-04 07:16:00

标签: javascript html angularjs twitter-bootstrap typeahead

我想在Bootstrap的输入中使用Typeahead。我在$ scope.regions中获取信息和存储空间。这是我的代码:

myfile.js:

            $scope.selectedRegion = "";
            $scope.regions =  res.data.result;

以下是我元素的截图:

enter image description here

我想在输入中使用regionName作为typeahead。这是我输入的HTML代码:

<input placeholder="select region" class="form-control form-xs typeahead" ng-model="selectedRegion" typeahead="region for region in regions($viewValue)">

我想在列表中检查regionName,如下所示:

            <li ng-repeat="region in regions">
              <a href = "#"> {{ region.regionName }} </a>
            </li>
          </ul>

好吧,我可以看到列表的结果。但Typeahead不起作用,我的意思是输入下的typeahead框不会出现。有什么建议吗?

3 个答案:

答案 0 :(得分:0)

使用我在下面提到的类型。因为您需要单独获取regionName的值,并且无法解析typeahead中的对象。

<input placeholder="select region" class="form-control form-xs typeahead" ng-model="selectedRegion" typeahead="region.regionName for region in regions($viewValue)">

或者添加onselect函数来测试typeahead中的值。

答案 1 :(得分:0)

您可以使用过滤器

 <input placeholder="select region" class="form-control form-xs typeahead" ng-model="selectedRegion" typeahead="region for region in regions | filter:$viewValue">

答案 2 :(得分:0)

首先在控制器中创建一个函数(ex autocompleteRegions()),过滤数据并将其作为简单数组返回:

    // test if string start with prefix 
    function stringStartsWith (string, prefix) {
        var minl = ( prefix.length < string.length ) ? prefix.length : string.length ;
        return string.slice(0, minl) == prefix.slice(0, minl);
    }
    $scope.autocompleteRegions = function(value){
         var returnMe  = [];
         // find with regionName begin with "value"
         for(var i in $scope.regions){
             if(stringStartsWith($scope.regions[i]["regionName"],value){
                 returnMe.push(  $scope.regions[i]["regionName"] ) ;
             } 
         }
         return returnMe ;
    }

然后在输入打字头中调用此函数

     <input typeahead="item for item in autocompleteRegions($viewValue)">