AngularJS - 带有异构数据数组的 ui.bootstrap typeahead

标签 angularjs bootstrap-typeahead angular-ui-bootstrap

我正在使用 ui.bootstrap typeahead 编写一个 typeahead 搜索栏,并发现该组件非常易于使用。

我的 Controller 将数据输入$scope,如下所示:

var good = [{ name: 'Mario', role: 'sup' },
            { name: 'Luigi', role: 'bro' },
            { name: 'Yoshi', role: 'pet' }]

var bad = [{ badname: 'Bowser', role: 'boss' },
           { badname: 'Sauron', role: 'eye' },
           { badname: 'Jason', role: 'knifer' }]

$scope.data = good.concat(bad)


然后,在 View 中,我有这样的内容:

<div class="container-fluid">
    <pre>Model: {{selected| json}}</pre>
    <input type="text" ng-model="selected" typeahead="datum.name for datum in data | filter:$viewValue | limitTo:4">
</div>


这最终会搜索好人,但不会搜索坏人(因为他们有 badname 而不是 name

有没有办法同时搜索两者?

<小时/> 奖励:我很乐意在我的人的名字下面显示他们的 Angular 色...提示? <小时/> 编辑:我知道这一点Typeahead using object name选择整个对象,但我希望也将其显示在弹出窗口中...... <小时/> 此处添加了 Plnkr --> http://plnkr.co/edit/KqvUlf

保持控制台打开,您将看到我正在谈论的标签的问题

只有好人才会出现,即使这样,在坏人中搜索不存在的字段时,搜索也会抛出异常

最佳答案

我编辑了你的 plunkr 来回答你的额外问题:

http://plnkr.co/edit/Yo4xBT?p=preview

基本上,您可以使用自定义模板对匹配执行任何您想要的操作。

对于主要问题,我纯粹的本性是建议您修改数组以保持一致,这样您就必须始终以名称进行搜索。仅仅因为你可以用 Angular 做很多事情并不意味着你应该这样做,所以我是从纯粹的软件工程 Angular 来看的。

编辑:我喜欢你的 json 数据。

关于AngularJS - 带有异构数据数组的 ui.bootstrap typeahead,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20220399/

相关文章:

twitter-bootstrap - Bootstrap-3-Typeahead afterSelect 获取 ID

AngularJs:更新列表值时,嵌套 UI-Bootstrap Accordion 不起作用

AngularJS 使用 templateHtml 的路径作为模块名称

javascript - 在一个 angularjs Controller 中访问本地函数

javascript - 在客户端上显示 SQL 格式化文本的最佳方式?

javascript - ngTable:无法读取属性 "page"?

bootstrap-typeahead - Twitter Typeahead.js 与 AJAX 中的雅虎财经

javascript - 使用 angularjs ng-show/ng-hide 显示和隐藏不同的内容

angularjs - 使用对象名称预先输入