angularjs ng-options 过滤第一个 Option 重置结果

angularjs ng-options filter first Option reset results

我从 JSON-Array 中获取数据列表。要过滤视图中的数据,我使用以下 select-box.

<select class="form-control" ng-model="obj.cookingType" ng-options="type for type in uniqueTypes">
   <option value="">Kochty</option>
</select>

在初始启动时,我看到了所有结果并且我可以过滤它。但是,如果我选择第一个值为空的选项,我希望结果列表会重置为初始值,并且会显示所有结果,但列表为空。怎么了。

这是我的控制器:

potatoApp.controller('potatoCtrl', function($scope, $http){

    var jsonPath = 'data.json';
    $http.get(jsonPath).then(function(response){

        $scope.potatoData = response.data;

        // Kochtypen als Object
        $scope.typesArr = [];
        for(var i = 0; i < $scope.potatoData.length; i++){
            for(var k = 0; k < $scope.potatoData[i].typ.length; k++){
                $scope.typesArr.push($scope.potatoData[i].typ[k]);
                }
            }   
        $scope.uniqueTypes = $scope.typesArr.filter(function(item, index){
            return $scope.typesArr.indexOf(item) == index;
            });

    });

});

这里是 plunker:Plunk

首先Angular过滤器不支持return所有数据的null值,所以为了处理你必须根据要求编写一个方法来处理过滤器。所以我做了一些更改以使其符合您的要求-

在Controller中-添加一个方法如:-

 $scope.customFilter=function(item){

        if(item===null){
            return "";
        }
        else{
            return item;
        }
    }

并且在视图中进行如下更改:-

 <tr class="potato-item" ng-repeat="potatos in potatoData | filter: customFilter(obj.cookingType) | filter: customFilter(obj.pickingType)">
                <td><strong>{{potatos.name}}</strong></td>
                <td>{{potatos.herkunft}}</td>
                <td>{{potatos.bluete}}</td>
                <td>{{potatos.knolle}}</td>
                <td>{{potatos.schale}}</td>
                <td>{{potatos.ernte|arrayToList}}</td>
                <td>{{potatos.ertrag}}</td>
                <td>{{potatos.geschmack}}</td>
                <td>{{potatos.typ|arrayToList}}</td>
       </tr>

注意-此代码是根据Plunker提供的。

在此处查找更新的 Plunk Updated Plunk