Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.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 repeat filter从object-angularjs否定字符串_Javascript_Angularjs_Angularjs Ng Repeat - Fatal编程技术网

Javascript ng repeat filter从object-angularjs否定字符串

Javascript ng repeat filter从object-angularjs否定字符串,javascript,angularjs,angularjs-ng-repeat,Javascript,Angularjs,Angularjs Ng Repeat,我想把这个过滤器:过滤器:'!类别' 关于这个元素,如下所示: <div ng-repeat="(prop, ignoredValue) in wines[0] | filter:'!Category'" ng-init="filter[prop]={}"> 您可以先编写一个简单的过滤器来提取密钥: app.filter('keys', function () { return function (object) { return Object.keys(o

我想把这个过滤器:过滤器:'!类别' 关于这个元素,如下所示:

<div ng-repeat="(prop, ignoredValue) in wines[0] | filter:'!Category'" ng-init="filter[prop]={}">

您可以先编写一个简单的过滤器来提取密钥:

app.filter('keys', function () {
    return function (object) {
        return Object.keys(object || {}).filter(function (key) {
            return key !== '$$hashKey'; // this is from ng-repeat
        });
    };
});
然后像这样使用它:

<div ng-repeat="prop in wines[0] | keys | filter:'!Category'"

过滤器
不支持对对象键进行过滤。我明白了。。。你认为有什么方法可以让我轻松解决这个问题吗@Runtarm预期的结果是什么?在你的提琴中,我无法找出任何错误。我想从对象中排除每一个类别:“值”,或者每一个名称:“值”。基本上,我想这样做,比如说,对象包括username、id、firstname、lastname等。如果我想将过滤后的葡萄酒数组分配给angularjs或javascript中的变量,我想排除某些键,比如id@runTarmI,我还有一个问题,与此解决方案不同(它工作得很好),我该怎么做?我整天都在摆弄它,尝试不同的方法,试图让其中一个函数返回数组,然后回调该函数并将其赋值给一个全局变量。但是我想不出来。。。但总的想法是我只是想把过滤后的数组存储在一个变量中。。。再次感谢,更多的帮助,非常感谢@runTarm我不确定我是否正确理解了你的第一个问题,但我看到你已经做到了=(wines | filter:filterByProperties,您应该可以通过
$scope.filtered
访问它。对于第二个问题,这是angularjs的一个特性,每当摘要循环开始时,它都会重复重新评估所有关注的表达式,直到找不到更多更改为止(稳定)。只要表达式运行得快,就不会有问题。如果筛选逻辑运行得慢或列表开始变大,最佳做法是避免在
ng repeat
表达式中使用筛选,在控制器中预先准备数据,并在不同的作用域变量中分配筛选项,然后在
ng repeat相反。啊,我明白了……这就是我的想法。问题是我使用了这个示例代码,并将其应用到我一直在使用完全不同的数据和变量编写的现有angular应用程序中。它工作正常,但在这个过程中的某个地方我把事情弄混了,所以如果我尝试访问$scope.filtered,我会得到未定义的部分。我想我可以找出这一部分。非常感谢您提供有关ng repeat的快速角度教程,内容丰富,非常感谢。@runTarm
var app = angular.module('myApp', []);
app.controller('myCtrl', function ($scope) {
$scope.wines = [
    { name: "Wine A", category: "red" },
    { name: "Wine B", category: "red" },
    { name: "wine C", category: "white" },
    { name: "Wine D", category: "red" },
    { name: "Wine E", category: "red" },
    { name: "wine F", category: "white" },
    { name: "wine G", category: "champagne"},
    { name: "wine H", category: "champagne" }    
];
$scope.filter = {};

$scope.getOptionsFor = function (propName) {
    return ($scope.wines || []).map(function (w) {
        return w[propName];
    }).filter(function (w, idx, arr) {
        return arr.indexOf(w) === idx;
    });
};

$scope.filterByProperties = function (wine) {
    // Use this snippet for matching with AND
    var matchesAND = true;
    for (var prop in $scope.filter) {
        if (noSubFilter($scope.filter[prop])) continue;
        if (!$scope.filter[prop][wine[prop]]) {
            matchesAND = false;
            break;
        }
    }
    return matchesAND;
/**/
/*
    // Use this snippet for matching with OR
    var matchesOR = true;
    for (var prop in $scope.filter) {
        if (noSubFilter($scope.filter[prop])) continue;
        if (!$scope.filter[prop][wine[prop]]) {
            matchesOR = false;
        } else {
            matchesOR = true;
            break;
        }
    }
    return matchesOR;
/**/
};

function noSubFilter(subFilterObj) {
    for (var key in subFilterObj) {
        if (subFilterObj[key]) return false;
    }
    return true;
}
});

app.filter('capitalizeFirst', function () {
return function (str) {
    str = str || '';
    return str.substring(0, 1).toUpperCase() + str.substring(1).toLowerCase();
};
});
app.filter('keys', function () {
    return function (object) {
        return Object.keys(object || {}).filter(function (key) {
            return key !== '$$hashKey'; // this is from ng-repeat
        });
    };
});
<div ng-repeat="prop in wines[0] | keys | filter:'!Category'"