Javascript AngularJS上带有复选框的布尔过滤器

Javascript AngularJS上带有复选框的布尔过滤器,javascript,angularjs,checkbox,angular-filters,Javascript,Angularjs,Checkbox,Angular Filters,我有一个属性为“published的对象数组,它可以是真的,也可以是假的。 我正在构建一个过滤器,以便只显示已发布或未发布的项目 到目前为止,已出版的一本书的作品如下: <input type="checkbox" ng-model="search.published" ng-change="search.published = search.published ? true : undefined"> Published ng-repeat="exhib

我有一个属性为“published的对象数组,它可以是真的,也可以是假的。 我正在构建一个过滤器,以便只显示已发布或未发布的项目

到目前为止,已出版的一本书的作品如下:

<input 
   type="checkbox" 
   ng-model="search.published" 
   ng-change="search.published = search.published ? true : undefined"> 
Published
ng-repeat="exhibitor in filterItems = (data | filter: search)"
当我尝试添加另一个复选框以仅显示未发布的项目时,问题就出现了

我尝试了第二个复选框:

<input 
   type="checkbox" 
   ng-model="search.published" 
   ng-change="search.published = search.published ? false : undefined"> 
Unpublished

未出版
但当然,它不能拥有与已发布项目相同的模型。此外,即使我删除了第一个复选框,该复选框也不会被勾选


有关如何解决此问题的任何提示?

复选框会自动为其
ng模型的
值指定一个真值或假值,因此无需使用
ng更改您的方式

<input 
   type="checkbox" 
   ng-model="search.published">
Published
接下来,您需要在控制器中创建自定义过滤器:

$scope.myCustomFilter = function(exhibitor) {
    if (exhibitor.published && exhibitor.published === $scope.search.published) {
        return exhibitor;
    } else if (!exhibitor.published && exhibitor.published === $scope.search.unpublished) {
        return exhibitor;
    }
};
您需要确保在控制器中定义
$scope.search

$scope.search = {
    published: false,
    unpublished: false
};
现在请重复您的
ng

ng-repeat="exhibitor in filterItems | filter:myCustomFilter"

我知道这个问题是关于使用复选框的,但也许这可以转化为一个用户体验问题。。。使用这样的复选框有意义吗?您可以尝试使用单选按钮或选择按钮,这样可以省去工作区的麻烦,而且效果会更好intuitive@PatrickBarr选择确实是正确的方法(:
ng-repeat="exhibitor in filterItems | filter:myCustomFilter"