angular.js - AngularJS filter:search 是如何匹配的 ng-repeat filter:search

【字号: 日期:2023-01-11浏览:42作者:雯心

问题描述

使用 angularJS 来进行测试,ng-reapt='pro in products | filter:search' 一个特别大的疑问如下的这个测试,为什么 search 输入框中,输入 a也会有结果

测试代码:

<!DOCTYPE html><html><head> <script data-require='angularjs@1.5.5' data-semver='1.5.5' src='https://code.angularjs.org/1.5.5/angular.js'></script> <link href='https://www.6hehe.com/wenda/style.css' rel='stylesheet' /> <script src='https://www.6hehe.com/wenda/script.js'></script></head><body> <script> var data = { 'products': [{'key': 'KEY1','name': 'iPhone6S','is_in_presale': false }, {'key': 'KEY2','name': 'iPhone7','is_in_presale': true }], 'activities': [] }; var cartApp = angular.module(’cartApp’, []); cartApp.controller(’ProductListCtrl’, function($scope, $http) { $scope.dump = function(input) {console.log(input); } $scope.products = data.products; // $scope.change(); }); </script> <p ng-app='cartApp' ng-controller='ProductListCtrl'> <input type='text' ng-model='search'> <p style='clear: both'></p> <p class='' style='float: left;width: 20%'> <h1>repeat</h1> <ol><li ng-repeat='pro in products'> {{pro.name}} - {{pro.key}}</li> </ol> </p> <p class='' style='float: left;'> <h1>normalProduct</h1> <ol><li ng-repeat='pro in products | filter:search as result'>{{pro.name}} - {{pro.key}}</li> </ol> </p> {{dump(result)}} </p></body></html>测试地址

http://plnkr.co/edit/wZIOF1uAvEgB9UPD1EnW?p=preview

问题解答

回答1:

你这种没有指定过滤哪个字段的情况下,默认filter会匹配所有字段的值。当你输入a的时候,angular应该是默认把false转成了字符串,a匹配到了false。如果你把过滤条件改成这样

<li ng-repeat='pro in products | filter:{name:search}'>{{pro.name}} - {{pro.key}}</li>

打a就不会有结果了,句话的意思是只过滤name字段的值。

回答2:

因为ng默认把你product里三个字段key,name,is_in_presale都转成字符串和你的输入去比较了,所以a其实匹配到的是false里的a。你可以试试输入true,就感受到结果区别了。

如果需要指定字段进行filter,参考文档:

angular.js - AngularJS filter:search 是如何匹配的 ng-repeat filter:search

或者直接看我的plunker

相关文章: