过滤器中的AngularJS逻辑表达式?

时间:2014-04-07 08:48:01

标签: javascript angularjs filter

基本上我想过滤到列表中的多个值。 我有一个名为items的过滤器列表,它代表下面列表中列表项的值。如果用户单击链接One,它将仅列出具有1作为值的listitems,单击Two列出值为2的listitems等。

主要问题来自名为OneTwo的链接,该链接应列出值为1或2的列表项,但我根本无法使其工作。我试图使用dot来包含多个值,但我无法使其工作。在示例中,我将OneTwo的值设置为“0”,但它应该类似于('1'。'2')。 代码和JSFiddle示例如下:

HTML:

<div ng-controller="FilterListController">
    <ul>
        <li ng-repeat="item in items">
            <a ng-click="select(item)" ng-class="{active: item == selected}">{{item.name}}</a>
        </li>
    </ul>
    <ul>
        <li ng-repeat="listitem in list | filter:{value: selected.value}">
            {{listitem.name}} - {{listitem.value}}
        </li>
    </ul>
</div>

JS:

var myApp = angular.module('myApp',[]);

function FilterListController($scope) {
    $scope.list = [
        {name: 'a', value: '1'},
        {name: 'b', value: '2'},
        {name: 'c', value: '3'}];

    $scope.items = [{name: 'OneTwo', value: '0'},{name: 'One', value: '1'},{name: 'Two', value: '2'},{name: 'Three', value: '3'}];

    $scope.selected = $scope.items[0];
    $scope.select = function(item){
        $scope.selected = item;
    }
}

JSFiddle示例。

1 个答案:

答案 0 :(得分:1)

您应该使用控制器中的自定义过滤器,然后显示列表

var myApp = angular.module('myApp',[]);

function FilterListController($scope, $filter) {
    $scope.list = [
        {name: 'a', value: '1'},
        {name: 'b', value: '2'},
        {name: 'c', value: '3'}];

    $scope.items = [{name: 'OneTwo', value: '12'},{name: 'One', value: '1'},{name: 'Two', value: '2'},{name: 'Three', value: '3'}];

    $scope.selected = $scope.items[0];
    $scope.select = function(item){
        $scope.selected = item;

        $scope.resultList = $filter('filterMyList')($scope.list, item);

    }
}

myApp.filter('filterMyList', function() {
    return function(list, val) {
        var newList = [];
        for (var i in list) {
            if(val.value.indexOf(list[i].value) !== -1) {
                newList.push(list[i]);
            }
        }

        return newList;

    }
})

更新了JSFiddle: http://jsfiddle.net/bikiew/c7jQk/1/