创建自定义角度过滤器
Creating custom angular filters
我有一个物品的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);
};
然而,来自过滤器的结果一直返回未定义。我知道我想要的条目确实存在,因为当我使用普通的$filter("filter")时,它工作得很好,但我不能冒险为我的应用程序使用如此广泛的过滤器。
感谢您的帮助:)
我认为问题出在函数的forEach部分。forEach函数不返回值。您正在向迭代器函数返回一个值,由于forEach没有从迭代器返回返回的值,因此您在$scope.shoppingCart.push($filter('barcodeScanner')($scope.parts, $scope.ItemToAdd));
中没有什么可推的
保存到一个变量,即在匿名工厂(包装器)函数内部声明的matchedPart
,并在forEach函数外部返回它,应该可以解决未定义的:
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函数进行重构。没有两个单独的。将isUndefine检查与!angular.isUndefined(vals.Part_Number) && !angular.isUndefined(vals.Other_Part_Number) && vals.Part_Number...
结合
您需要检查==
而不是.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)))
希望这能对你有所帮助。谢谢
- 如何在angular.js中动态应用自定义过滤器
- 自定义angularjs过滤器日期时间格式额外字符
- AngularJS自定义过滤器未触发点击事件
- AngularJS中货币过滤器的Javascript代码无法使用自定义符号
- Vue.js如何在定义API变量之前实现自定义过滤器
- 我们如何自定义内置的 Angular “货币”过滤器
- 用于分页的 AngularJS 自定义过滤器
- 为什么我的自定义过滤器会导致无限消化
- 如何仅在文本字段中有值时才将自定义过滤器应用于 ng-repeat
- 指令中的 AngularJS 自定义过滤器以格式化值
- Angular自定义过滤器在处理某些匹配时注销,但会过滤掉所有结果
- Angular js自定义过滤器未定义
- AngularJS自定义过滤器调用了两次,并在第二次调用时删除输入数据
- 自定义Angular.js过滤器在IE8中不返回任何内容,在Chrome/FF中运行良好
- 自定义角度过滤器提供TypeError.不能调用undefined,但变量已定义并有效
- 创建自定义角度过滤器
- 自定义过滤器的问题,我缺少什么
- 如何在Angular 1.3.6上创建一个自定义过滤器来搜索嵌套数组
- json数组angularjs中的自定义过滤器
- 两个日期之间的自定义过滤器 AngularJS