每次用户写某个单词时输入

时间:2016-01-26 11:52:15

标签: html angularjs angular-ui-bootstrap angular-ui-typeahead

我使用ui-bootstrap typeahead用于当用户键入以显示所有可供他编写的变量时,这些变量是来自加载的对象的属性Ex:item.cost + item.quantity 我的问题是我希望每次用户输入“item”时都会显示建议。我注意到typeahead只适用于一个单词并且在开始时。

HTML

<div class="modal-body">
          Add expression:
            <textarea style="width: 568px;" ng-model="item.formula"
                      uib-typeahead="state for state in states " 
                     typeahead-show-hint="true"
                     typeahead-on-select="item"
                      ng-change="eval(item.formula)">
            </textarea>
            <p><b>Result:</b> <br>
            <div style="width: 100%">{{ans}}
            </div>
            </p>
            </div>

控制器

 ctrl.controller('myController', ['$scope', function ($scope) {
$scope.imageShowModal = function (item) { //loads the object items
    $scope.item = item;
    $scope.states =Object.keys(item); //get the JSON keys from item object like cost,price,quantity,workflow...
};

$scope.eval = function (v) {
    try {
        $scope.ans = $scope.$eval(v);
    } catch (e) {
    }
};

1 个答案:

答案 0 :(得分:0)

您可以在uib-typeahead表达式中使用自定义过滤器,例如:uib-typeahead="state for state in states | myCustomFilter:$viewValue"

您的案例中的自定义过滤器可能如下所示:

angular.module('myApp')
  .filter('myCustomFilter', function() {
    return function(list, term) {
      if (term.indexOf('item.') === -1)
        return [];

      var filteredList = [];
      angular.forEach(list, function(value) {
        if (value.indexOf(term) !== -1)
          filteredList.push(value);
      });

      return filteredList;
    }
  });

另请参阅:AngularJs UI typeahead match on leading characters