为什么ui-select每次第二次选择不清除?

时间:2014-12-10 16:08:37

标签: angularjs angular-ui ui-select

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

ui-select有两种状态:

  1. 按钮 - 当我实际上没有点击它时
  2. 输入 - 当我点击它并让它搜索
  3. 启动时,按钮有我的占位符文字"搜索..."。我点击它,开始搜索,它会显示一个列表,我选择一个选项,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. 搜索文字,我发现&#34; 123&#34;最简单的
    3. 选择一个选项
    4. 查看ng-model已清除
    5. 再次搜索
    6. 选择其他选项,或选择相同的选项
    7. 查看ng-model未清除
    8. 以下是图片。

      初​​始:

      Initial

      搜索期间:

      Select

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

      After select PROBLEM

      为什么在每次第二次选择后,按钮最后一张图像都没有清除?

1 个答案:

答案 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 = '';
      }
    }); 
    

我猜后者更有效率,因为它不会触发完整的摘要周期。 (但我不是角内件的专家。)