Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 删除空选项ng REPECT和ng选项after filter_Javascript_Angularjs - Fatal编程技术网

Javascript 删除空选项ng REPECT和ng选项after filter

Javascript 删除空选项ng REPECT和ng选项after filter,javascript,angularjs,Javascript,Angularjs,有几个问题与此非常相似,但我一直无法找到解决方案 我有一个使用angularJS的选择列表。我需要使用title属性,以便使用ng repeat创建选项,即使使用ng selected始终选择第一个选项,也始终存在一个空白选项 即使我做出选择,空白选项也会消失,如果我过滤掉所选的值,空白将再次出现。 我使用NG选项(不包括我需要的TITLE属性)和一个缺省值来包含一个选择列表,以显示在过滤器之后出现空白。 我希望的行为是永远不要有一个空白选项(总是选择第一个选项就可以了),并且可能每个选项都有一

有几个问题与此非常相似,但我一直无法找到解决方案

我有一个使用angularJS的选择列表。我需要使用title属性,以便使用ng repeat创建选项,即使使用ng selected始终选择第一个选项,也始终存在一个空白选项

即使我做出选择,空白选项也会消失,如果我过滤掉所选的值,空白将再次出现。

我使用NG选项(不包括我需要的TITLE属性)和一个缺省值来包含一个选择列表,以显示在过滤器之后出现空白。 我希望的行为是永远不要有一个空白选项(总是选择第一个选项就可以了),并且可能每个选项都有一个用于特殊处理点击事件的指令

提前谢谢

JS小提琴:


{{p.name}}
我用叉子叉了你的小提琴(如果我可以直截了当的话):

这在某种程度上解决了这个问题。虽然我还没有让它与过滤器一起正常工作

无论如何,我在这里要做的是使用person.id作为每个选项的值

<select ng-model="person.current">
    <option ng-repeat="p in people | filter:person.SearchTerm" ng-selected="$first" value="{{p.id}}" title="{{p.name}}">
        {{p.name}}
    </option>
</select>
但这仍然不是100%。我有点困惑为什么当你过滤选择……/P>时空格出现。 另一种可能有效也可能无效的方法是使用类似于filterPeople()中的
ng repeat=“p
,并在filterPeople函数中筛选数组。但我不确定这是否会改变任何内容

更新:我在这里测试了我的建议: 如果将选定对象设置为筛选数组中的第一个对象,则该操作有效。每次创建新的筛选数组时,我都会执行此操作:

$scope.filterPeople = function () {
    var array = filterFilter($scope.people, $scope.person.SearchTerm);
    $scope.person.current = array[0].id;
    return array;
};

当实际选择了与select中可见的对象不同的另一个对象时,事情似乎变得复杂起来。这是可以理解的:)

您的实际问题是ngModel中的值引用的是select中不再存在的值

解决方案是,无论何时更改选择选项,都要检查person.current以确保它指向有效的条目


这也意味着您可能希望将筛选器移动到控制器中,并在作用域中设置选项(您可以在代码中使用$filter服务来获得相同的行为,)。这样,您可以在控制器中设置一个函数来检查person.current是否有效,如果无效,则将其设置为所需的选项(例如,第一个选项).

当所有项目都被过滤掉时,上面引用的毛发是由于一个空数组,并通过以下方式修复:

 if(array.length>0)
        $scope.person.current = array[0].id;

希望这有帮助

$scope.filterPeople = function () {
    var array = filterFilter($scope.people, $scope.person.SearchTerm);
    $scope.person.current = array[0].id;
    return array;
};
 if(array.length>0)
        $scope.person.current = array[0].id;