使用 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="style.css" rel="stylesheet" />
<script src="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
Lorsque vous ne spécifiez pas quel champ filtrer, le filtre par défaut correspondra aux valeurs de tous les champs. Lorsque vous entrez a, angulaire doit convertir false en chaîne par défaut et a correspond à false. Si vous modifiez les conditions de filtre comme ceci
Si vous tapez a, il n'y aura aucun résultat. Cela signifie que seule la valeur du champ de nom est filtrée.
Parce que
ng
convertit par défaut les trois champsproduct
,key
etname
de votreis_in_presale
en chaînes pour comparaison avec votre entrée, donca
correspond réellement àfalse
dansa
. Vous pouvez essayer de tapertrue
et ressentir la différence dans les résultats.Si vous devez préciser un champ pour
filter
, veuillez vous référer au document :Ou regardez simplement mon plunker