使用过滤器在选项中搜索在angularJS中添加空选项

使用过滤器在选项中搜索在angularJS中添加空选项,angularjs,angularjs-filter,Angularjs,Angularjs Filter,我对AngularJS中的过滤器有问题。我使用过滤器显示搜索框中基于选项的输入。一切正常,但每次我搜索时(除了默认选项(使用ng model设置)都会在结果中添加一个空选项 我为标签设置了ng型号 这是我的密码 <div class="choosePatternHeader"> <span>Pattern name</span> <input ng-model="obj.name" type="text"> </div>

我对AngularJS中的过滤器有问题。我使用过滤器显示搜索框中基于选项的输入。一切正常,但每次我搜索时(除了默认选项(使用
ng model
设置)都会在结果中添加一个空选项

我为
标签设置了
ng型号

这是我的密码

<div class="choosePatternHeader">
    <span>Pattern name</span>
    <input ng-model="obj.name" type="text">

</div>
<div class="select_div">
    <select  size="4"  ng-model="pattern" ng-options="p.name  for p in patterns | filter:obj">
    </select>
</div>

图案名称
这是我搜索“模式4”时的结果


模式4
搜索“模式1”(默认选项)时的结果


模式1

这里有一个

如果
ng model
设置为
ng options
中没有的值,AngularJS确实会添加一个虚拟选项。当过滤器不返回任何值时(当
ng options
为空时,
ng model
永远不能在其中),我不知道有什么方法可以防止出现这种情况,但当它返回时,您可以将
ng model
设置为第一项,这意味着不会创建虚拟选项。您可以使用
ng change
或类似方法来完成此操作。

同样的情况也会发生在
上,因此我想这就是根本问题所在

我找到的唯一“解决方案”是通过定义一个空选项来简单地利用空值,例如,
请选择

我解决了以下问题

function MyController($scope, $filter)
{
    $scope.patterns=[{name:'pattern 1'},{name:'pattern 2'},{name:'pattern 3'},{name:'pattern 4'}];
    $scope.pattern=$scope.patterns[0];

    $scope.$watch('obj.name', function(value){
          var filtered_devices = $filter('filter')($scope.patterns, {name:$scope.obj.name});         
          if (filtered_devices) {
              $scope.pattern = filtered_devices[0];
          }
    }, true);
}

我添加了ng模型。试试我的jsiddle链接。直到我在searchbox中插入一个字符串以过滤您需要的数据之前,一切都正常。我已经在AngularJS的Git上创建了一个问题
 <select class="ng-pristine ng-valid" ng-options="p.name for p in patterns | filter:obj"    ng-model="pattern" size="4">
<option value="0">pattern 1</option>
</select>
function MyController($scope, $filter)
{
    $scope.patterns=[{name:'pattern 1'},{name:'pattern 2'},{name:'pattern 3'},{name:'pattern 4'}];
    $scope.pattern=$scope.patterns[0];

    $scope.$watch('obj.name', function(value){
          var filtered_devices = $filter('filter')($scope.patterns, {name:$scope.obj.name});         
          if (filtered_devices) {
              $scope.pattern = filtered_devices[0];
          }
    }, true);
}