0

ui-select中,当我选择一个选项时,on-select回调确实会触发,但该选项不会每秒钟清除一次。

ui-select 有两种状态:

  1. 按钮 - 当我没有实际点击它时
  2. 输入 - 当我点击它并让我搜索

当它启动时,按钮有我的占位符文本“搜索...”。我点击它,开始搜索,它会弹出一个列表,我选择一个选项,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

  1. 点击选择
  2. 搜索文字,我发现“123”最简单
  3. 选择一个选项
  4. 看到ng-model清除了
  5. 再次搜索
  6. 选择另一个选项,或相同的选项
  7. 看到ng-model没有清除

这是图像。

最初的:

最初的

搜索期间:

选择

选择后(每第二个) -这是我的问题

选择问题后

为什么每次第二​​次选择后按钮最后一个图像中没有清除它?

4

1 回答 1

0

迟了,但也许有帮助:我想这与 ui-select 中 angular-digest 循环的错误实现有关。请参阅角度文档的范围生命周期。

那么,你能做些什么呢:

  • 将您对选定回调所做的所有修改都包装在 $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 = '';
      }
    }); 
    

我猜后者效率更高,因为它不会触发完整的摘要循环。(但我不是角度内部的专家。)

于 2015-02-04T09:38:28.123 回答