Angular ui-select点击选中项调用函数传参为undefined如何解决
失效原因
ng-click绑在<ui-select-match>根标签上拿不到$item是作用域问题:<ui-select-match>本身是所有已选tag的外层公共容器,绑定在这个标签上的事件走的是外层作用域,根本没有ui-select遍历渲染单个已选项时生成的局部$item变量,传参自然是undefined。$item是组件渲染每个单独已选项时,注入到单条选项模板内部的上下文变量,只有在<ui-select-match>标签包裹的内部模板内容里才能访问到。
正确写法
把点击事件移到<ui-select-match>内部包裹单条选项内容的元素上即可,代码如下:
<ui-select-match style="width: 100%;" placeholder="Select values..."> <span ng-click="$ctrl.myFunction($item); $event.stopPropagation()"> {{$item["name"]}} </span> </ui-select-match>
- 这里直接传
$item就能把当前点击的完整选中项对象传入你的方法,如果只需要name字段,传$item["name"]或者$item.name都可以。 - 加
$event.stopPropagation()是为了阻止事件冒泡,不然点已选项的时候会顺带触发下拉面板的展开收起,不符合常规交互预期,不需要的话可以删掉。
内容的提问来源于stack exchange,提问作者Mandroid
相关产品推荐
相关产品推荐

