首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何选择在ng-tags-input autocomplete中显示哪个字段?

如何选择在ng-tags-input autocomplete中显示哪个字段?
EN

Stack Overflow用户
提问于 2014-11-06 21:00:54
回答 3查看 8.7K关注 0票数 2

来自文档:

代码语言:javascript
复制
<tags-input>
  <auto-complete
    source="{expression}"
  >
  </auto-complete>
</tags-input>

表达式的结果必须是最终解析为对象数组的promise。

代码语言:javascript
复制
$scope.loadSuperheroes = function(query) {
// An arrays of strings here will also be converted into an
// array of objects
return $http.get('superheroes.json');
};

但是我已经在$scope中有了一个对象数组。但具有不同的结构:

代码语言:javascript
复制
$scope.superheroes = [{"id":1, "name":"Batman"}, {"id":2, "name":"Superman"}]

如何在html中使用来自$scope.superheroes.name的列表?

EN

回答 3

Stack Overflow用户

发布于 2014-11-08 03:40:40

通过设置displayProperty属性,可以更改用于显示标记文本的属性:

代码语言:javascript
复制
<tags-input ng-model="tags" display-property="name"></tags-input>

autocomplete指令也将使用该属性来显示返回的建议。

票数 4
EN

Stack Overflow用户

发布于 2014-11-06 21:20:06

如文档中所述:http://mbenford.github.io/ngTagsInput/gettingstarted

NgTagsInput可以对一组基本项执行自动补全(几个月前我在GitHub上向该指令的创建者询问过它)。

所以我认为你会有:

要将对象数组重新构造为类似以下内容的参数:[{ text: 'Tag1' }, { text: 'Tag2' }, { text: 'Tag3' }]

  • Then,

  • 您必须使用$query作为loadSuperheroes()方法的参数(因为$query是正在键入的文本。

因此,HTML:

代码语言:javascript
复制
<tags-input ng-model="filteredsuperheroes">
 <auto-complete
    source="loadSuperheroes($query)"
  >
  </auto-complete>
</tags-input>

然后,JS (Angular)部分:

代码语言:javascript
复制
$scope.filteredsuperheroes = [];
angular.forEach(superheroes, function(superhero) {
  var newEntry = {};
  newEntry['text'] = superhero.name;
  $scope.filteredsuperheroes.push(newEntry);
});
$scope.loadSuperheroes = function(query) {
   return $http.get('/filteredsuperheroes?query=' + query);
 };

提供一个活生生的例子,这样我就可以测试一下:)我不确定这是否可以工作,但您应该很容易理解我的意思:)

票数 1
EN

Stack Overflow用户

发布于 2015-12-09 05:32:10

autocomplete的源属性需要一个 promise ,所以如果您想要使用一个已经存在的对象数组,您必须返回一个解析到它的promise:

代码语言:javascript
复制
  $scope.superheroes = [{"id":1, "name":"Batman"}, {"id":2, "name":"Superman"}];

  $scope.loadTags = function(query) {
    var deferred = $q.defer();
    deferred.resolve($scope.superheroes);
    return deferred.promise;
  };

而且,由于您显示的属性名称不是文本输入元素(默认为tagsInput),您需要通过将属性display-property="name"添加到tags-input元素来指定它:

代码语言:javascript
复制
<tags-input ng-model="superheroesModel" display-property="name" add-on-paste="true">
      <auto-complete min-length="1" source="loadTags($query)"></auto-complete>
</tags-input>

我从ngTagsInput Demo Page派生了一个简单的自动补全示例,并进行了以下更改。请查看这些更改here

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26780149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档