javascript - 在 Angular JS 中提前输入

标签 javascript angularjs typeahead

我是 Angular JS 新手。我正在尝试为我得到的 json 数据实现 typeahead: json数据的格式如下:

$scope.utilstates = [
    { "State": "Florida", "Key": "FL", "Utility": [ "Bartow (City of) Electric", "Clay Electric Co-Op", "Florida Power & Light", "FMG", "Gainesville Regional Utilities", "Gulf Power Company" ] },
    { "State": "Texas", "Key": "TX", "Utility": [ "AEP-Texas (SWEPCO)", "Austin Energy", "Brownsville Public Utilities Board (TX)", "CenterPoint Energy (Reliant - HL&P)"] },
    { "State": "Virginia", "Key": "VA", "Utility": [ "DVP", "NOVEC"] }
];

在 html 中,我希望用户输入公用事业公司,无论其状态如何,并且应显示匹配的公用事业公司。

在 html 中,我有以下代码:

<input type="text" ng-model="query.utility" typeahead="st as st.Utility for st in utilstates | filter:({Utility:$viewValue}) | limitTo:8" class="form-control" placeholder="Utilities">

但是我得到了完整的值数组,而不是从匹配的数组中选择的值。

任何帮助将不胜感激。

笨蛋链接: http://plnkr.co/edit/no0hATW5mHiIbuON6B9E?p=preview

最佳答案

首先。选择后获得对象数组的原因是,在 as 关键字之后的 as st.Utility 您必须提供在预输入提示中以及选择后可见的表达式文本输入。

for 之后的第一个表达式(在您的情况下是 st)将导致从 utilstates 接收整个对象,而不是所需的 Utility .

其次。您无法在没有辅助方法的情况下从作为预输入选择元素的对象中的嵌套数组中指向特定项目,这会使您的代码变得更加复杂。

我的建议是重新考虑这些实用程序的数据结构。也许不是制作整个状态的数组,而是创建单个实用程序的数组。例如:

var utilities = [{
    State: "Virginia",
    Key: "VA",
    Name: "AEP-Texas (SWEPCO)"
}//And so on...]

然后你可以轻松地使用:

实用程序作为实用程序。实用程序中实用程序的名称

关于javascript - 在 Angular JS 中提前输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29352886/

相关文章:

javascript - 无法理解如何在 typeahead 0.10.1 中使用 alt 模板引擎

jquery - typeahead.js 预取问题

javascript - 如何像 Ember.js 那样抽象 ajax 请求的异步行为?

javascript - Chart.js 自定义图表

javascript - 使用 JavaScript 遍历 DOM 树

javascript - 未知提供者 : $resourceProvider - AngularJS

AngularJS:如何在 Controller 内的 onsubmit 上调用函数作为 ng-submit

javascript - 无法在 Angular 中设置特定 View 的样式

html - 如何在 div 中使用 ion-tabs

javascript - Twitter 的 Bootstrap typeahead 设置