Фильтр с повторением нг - PullRequest
       2

Фильтр с повторением нг

0 голосов
/ 24 сентября 2018

Я пытаюсь создать фильтр с директивой angularJs под названием ng-repeat, фильтр работает следующим образом: Когда вы нажимаете на checkbox фильтры в массиве элементы, которые имеют offers, я использую функцию для фильтрации, я думаю, что есть лучший способ сделать это без такого большого количества кода.

var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, $http, $document) {

    $scope.items = [
        {
            id: 0,
            description: "Primer Item 1",
            offers: [
                {
                    id: 0,
                    name: "Casa"
                }
            ]
        },
        {
            id: 1,
            description: "Segundo Item 2"
        },
        {
            id: 2,
            description: "Tercer Item 3"
        },
        {
            id: 3,
            description: "Cuarto Item 4"
        },
        {
            id: 4,
            description: "Quinto Item 5"
        },
        {
            id: 5,
            description: "Sexto Item 5",
            offers: [
                {
                    id: 1,
                    name: "Bodega"
                }
            ]
        },
        {
            id: 6,
            description: "Septimo Item 6"
        },
        {
            id: 7,
            description: "Octavo Item 7"
        },
        {
            id: 8,
            description: "Noveno Item 8"
        },
        {
            id: 9,
            description: "Decimo Item 9"
        }
    ];

    $scope.filterItem = function() {
        if (!$scope.itemOffer){
            $scope.filterOffer = function(item) {
                return item.offers && item.offers.length > 0;
            };
            $scope.itemOffer = true;
        } else {
            $scope.filterOffer = function(item) {
                return item;
            };
            $scope.itemOffer = false;
        }
    };

});
<!DOCTYPE html>
<html>

    <head>
        <meta charset="utf-8" />
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>
    </head>

    <body ng-app="myApp" ng-controller="myCtrl">
        <input type="checkbox" name="filter" value="propertyOffer" ng-model="propertyOffer" ng-click="filterItem()">Item with offert
        <div ng-repeat="item in items | filter: filterOffer track by $index">
            {{ item }}
        </div>
    </body>

</html>

1 Ответ

0 голосов
/ 24 сентября 2018

Вы можете использовать ng-if с директивой ng-repeat для фильтрации элементов, содержащих предложения по желанию:

JS CODE

var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, $http, $document) {
    $scope.offersOnly = false;
    $scope.items = [
        // Your items
    ];
});

HTMLКОД

<body ng-app="myApp" ng-controller="myCtrl">
    <input type="checkbox" ng-model="offersOnly" ng-true-value="true" ng-false-value="false"/>
    <div ng-repeat="item in items" ng-if="!offersOnly">
        {{item}}
    </div>

    <div ng-repeat="item in items" ng-if="offersOnly && item.offers">
        {{item}}
    </div>
</body>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...