AngularJS中的typeahead指令获取链输入自动填充

时间:2015-04-30 09:24:35

标签: javascript angularjs

我现在正在尝试使用angularJS编写表达式,这就像数学表达式一样。但是当我试图向运营商提出建议时,我陷入了困境。

例如,表达式可能是这样的: ABS(x)+ Floor(y)。

我尝试使用typeahead指令,但建议仅显示ABS(x)。当运营商" +"和楼层(y)输入,没有任何建议。 这是我的代码快照。如果有人可以提供帮助,我将非常高兴。谢谢!

JS:

$scope.explist = ['ABS(x)',  'Floor(y)']

HTML:

<div>
<input type="text" maxlength="100" ng-model="exp" typeahead="e for e in explist | filter:$viewValue | limitTo:8"  />
</div>

1 个答案:

答案 0 :(得分:1)

在阅读你的评论之后,我认为在你的情况下使用typeahead是错误的。

- &GT; see jsbin&lt; -

我建议使用ui-select。您可以在数组中列出表达式,然后使用选择构建第二个数组。

由于您需要使用多个运算符,因此您可以为该指令提供显示可用选项的函数。在这个例子中,我给了他们

var modifiers = ['/', '+', '-', '*'];

这是控制器

    $scope.exp.available = ['ABS(x)', 'Floor(y)'];
    $scope.exp.formatted = function () {
        var holder = [];
        angular.forEach($scope.exp.available, function (thing) {
          holder.push(thing);
          for (i = 0; i < modifiers.length; i++) {
                    holder.push(modifiers[i] + thing);
                }
        });
        return holder;
    };

HTML

<ui-select multiple ng-model="exp.expressions" theme="select2" style="width: 300px;">
    <ui-select-match placeholder="Select...">{{$item}}</ui-select-match>
    <ui-select-choices repeat="e in exp.formatted() | filter:$select.search">
      {{e}}
    </ui-select-choices>
  </ui-select>

你将需要角度化处理和ui-select。我在这里为你创建了一个JSBin http://jsbin.com/paqotiticu/2/edit?html,css,js,output

这只是一个开始,你可以开发使用按键或删除元素的功能,希望这有帮助,祝你好运!