当用户键入其名称并像在此 plunker中一样在Tagging without multiple部分中按回车时,我正在尝试将新元素添加到数组中。这是我到目前为止所得到的:
<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 中,当您键入一些随机字符串并按 Enter 键时,会创建新标签并立即被选中。我找不到任何代码可以将侦听器附加到 plunker 中的任何类型的事件,它以某种方式神奇地工作。在文档中,据说该指令提供了两个自定义事件 on-remove 和 on-select。正如您在上面的标记中看到的那样,我试图将我的听众附加到 on-select 但当然没有运气。那么应该怎么做呢?我应该听key-press并在处理程序内部检查按下了什么键,如果它是Enter键,那么将新类别添加到数组中?如果是这样,我怎样才能掌握当前的搜索字符串?
我也是对的,作为处理函数的第二个参数传递了指令的模型(与我ng-model在上面的标记中指定的相同),如果我想选择我的新对象,我必须像这样简单地分配它:
model = item
我必须说 angularjs/select2 的文档很差。