在ui-select
中,当我选择一个选项时,on-select
回调会触发,但该选项不会每隔一次清除。
ui-select有两种状态:
启动时,按钮有我的占位符文字"搜索..."。我点击它,开始搜索,它会显示一个列表,我选择一个选项,on-select
触发,我在其中清除ng-model
。
然而,在我做的第二次选择中,它忽略了我的回调中的ng-model
清除。
<ui-select ng-model="result.selected" theme="bootstrap" class="search" on-select="searchselect($item)" reset-search-input="true" on-select="selected($item)">
<ui-select-match placeholder="Search...">{{$select.selected.name}}</ui-select-match>
<ui-select-choices refresh="search({val:$select.search})" refresh-delay="300" repeat="item in results">
<div ng-bind="item.name"></div>
</ui-select-choices>
</ui-select>
这是我的on-select
代码:
$scope.selected = function(item) {
$scope.picked = item;
$scope.result.selected = "";
};
我修改了基本的ui-select
示例plunkr来复制它:http://plnkr.co/edit/16DRYH8MbPJOy0GpogZz?p=preview
ng-model
已清除ng-model
未清除以下是图片。
初始:
搜索期间:
选择后(每第二个) - 这是我的问题
为什么在每次第二次选择后,按钮最后一张图像都没有清除?
答案 0 :(得分:0)
最近,但也许有帮助:我猜它与ui-select中的角度消化循环的错误实现有关。 See scope lifecycle of the angular documentation.
那么,你能做些什么呢?
在$ timeout中对您在选定回调上执行的作用域上的所有修改进行换行,因为angular会自动将所有内容包装在安全的摘要周期中。 示例:
$scope.selected = function(item) {
$timeout(function(){
$scope.picked = item;
$scope.result.selected = "";
});
};
使用$ watch表达式而不是回调函数:
$scope.$watch('result.selected', function(newVal){
if(newVal !== ''){
$scope.picked = newVal;
$scope.result.selected = '';
}
});
我猜后者更有效率,因为它不会触发完整的摘要周期。 (但我不是角内件的专家。)