我有一个json项目和条形码扫描仪,条形码扫描仪直接输入我的应用程序。
现在这些物品有一个主要部件号和一个次要部件号,条形码扫描器的结果往往是主要部件号,但我必须同时检查两者。
我正在尝试实现一个自定义过滤器来执行此操作,但它似乎不起作用,任何人都可以让我知道我做错了什么?
storeApp.filter('barcodeScanner', function() {
return function(parts, barcode) {
angular.forEach(parts, function (vals, key) {
if( !angular.isUndefined(vals.Part_Number) && vals.Part_Number !== null )
if (angular.equals(vals.Part_Number,barcode))
return parts[key];
});
angular.forEach(parts, function(vals, key) {
if ( !angular.isUndefined(vals.Other_Part_Number) && vals.Other_Part_Number !== null )
if (angular.equals(vals.Other_Part_Number,barcode))
return parts[key];
});
};
});
然后我会在控制器中调用过滤器,
$scope.addItemToCart = function() {
$scope.shoppingCart.push($filter('barcodeScanner')($scope.parts, $scope.ItemToAdd));
console.log($scope.Cart.itemToAdd);
console.log($filter('barcodeScanner')($scope.parts, $scope.Cart.itemToAdd));
$scope.Cart.itemToAdd = "";
console.log($scope.shoppingCart);
};
然而,过滤器的结果保持返回undefined。我知道一个事实,我想要的条目确实存在,因为当我使用普通的$ filter('过滤器')它工作正常,但我不能冒这样广泛的过滤器为我的应用程序。
感谢您的帮助:)
答案 0 :(得分:1)
而不是.equals
您需要检查==
,因为string
不会完全等于number
angular.equals
只是强烈检查javascript ===
,检查两个值是否与其类型相同。
if(angular.equals(vals.Other_Part_Number,barcode))
已更改为
if(vals.Other_Part_Number == barcode)
如果您想严格检查,则需要使用parseInt
将值转换为数字,然后检查
if(angular.equals(parseInt(vals.Other_Part_Number),parseInt(barcode)))
希望这可以帮到你。感谢。
答案 1 :(得分:1)
我认为问题出在你职能的forEach部分。 forEach函数不返回值。您正在向迭代器函数返回一个值,因为forEach没有从迭代器返回返回的值,那么您将无法在$scope.shoppingCart.push($filter('barcodeScanner')($scope.parts, $scope.ItemToAdd));
保存到变量ie。在匿名工厂(包装器)函数内声明matchedPart
并将其返回到forEach函数之外应该解决undefined:
storeApp.filter('barcodeScanner', function() {
return function(parts, barcode) {
// declare a variable here
var matchedPart;
angular.forEach(parts, function (vals, key) {
if( !angular.isUndefined(vals.Part_Number) && vals.Part_Number !== null )
if (angular.equals(vals.Part_Number,barcode))
// save it to new variable
matchedPart = parts[key];
});
angular.forEach(parts, function(vals, key) {
if ( !angular.isUndefined(vals.Other_Part_Number) && vals.Other_Part_Number !== null )
if (angular.equals(vals.Other_Part_Number,barcode))
// save it to new variable
matchedPart = parts[key];
});
// return it outside the forEach function
return matchedPart;
};
});
最后一点:
我还认为你应该通过结合你的forEach函数来重构。没有2个独立的。将isUndefined检查与!angular.isUndefined(vals.Part_Number) && !angular.isUndefined(vals.Other_Part_Number) && vals.Part_Number...