我正在尝试在用户输入其名称时向阵列添加新元素,并在标记无多个部分的this plunker中按Enter键。这是我到目前为止所得到的:
<ui-select tagging="catTransform" on-select="addCategory()" ng-model="category.selected" theme="bootstrap" style="width: 600px;" title="Choose a category">
<ui-select-match placeholder="Выберите категорию...">{{category.name}}</ui-select-match>
<ui-select-choices repeat="category in categories | filter: {name: $select.search}">
<div ng-bind-html="category.name | highlight: $select.search"></div>
</ui-select-choices>
</ui-select>
在我的控制器中,我有:
$scope.category = {}
$scope.categories =
[
{name: 'Food', id: 5},
{name: 'transport', id: 10}
]
$scope.catTransform = (name) ->
cat = {name: name, id: null}
$scope.addCategory = (item, model) ->
$scope.categories.push item
model = item
现在您可以看到categories
不是普通字符串而是对象数组,所以我有这个catTransform
函数来从字符串创建对象。在你输入一些随机字符串并点击输入时,在plunker中创建新标记并立即被选中。我无法找到任何能够将侦听器附加到侦探器中的任何事件的代码,它以某种方式神奇地工作。
在the docs中,它表示该指令提供了两个自定义事件on-remove和on-select。我尝试将我的听众附加到on-select上,你可以在上面的标记中看到,但当然没有运气。那应该怎么做呢?我应该听key-press
并在处理程序内部检查按下了哪个键,如果它是Enter
键,那么将新类别添加到数组中?如果是这样,我如何获得当前搜索字符串?
我也是正确的,因为处理函数的第二个参数是指令的模型(与我在上面的标记中通过ng-model
指定的相同)并且如果我想要选择我的新对象我必须简单地分配它:
model = item
我发现angularjs / select2的文档非常差,我必须说。