diff options
| author | Caitlin Potter | 2014-02-11 09:57:04 -0500 |
|---|---|---|
| committer | Caitlin Potter | 2014-02-11 17:08:41 -0500 |
| commit | b4eed8ad94ce9719540462c1ee969dfd3c6b2355 (patch) | |
| tree | 83e7074344a407168b2fa622d49f060ffe956078 /src | |
| parent | 08793a690abe3eda40deae10f8a0a117779bdbd9 (diff) | |
| download | angular.js-b4eed8ad94ce9719540462c1ee969dfd3c6b2355.tar.bz2 | |
feat(filterFilter): support deeply nested predicate objects
Due to 339a165, it became impossible to filter nested properties of an object using the filterFilter.
A proposed solution to this was to enable the use of nested predicate objects. This change enables the
use of these nested predicate objects.
Example:
```html
<div ng-repeat="it in items | filter:{ address: { country: 'Canuckistan'}}"></div>
```
Or
```js
$filter('filter')(items, { address: { country: 'Canuckistan' } });
```
Closes #6215
Related to #6009
Diffstat (limited to 'src')
| -rw-r--r-- | src/Angular.js | 3 | ||||
| -rw-r--r-- | src/ng/filter/filter.js | 9 |
2 files changed, 11 insertions, 1 deletions
diff --git a/src/Angular.js b/src/Angular.js index 9811c363..e9d1de88 100644 --- a/src/Angular.js +++ b/src/Angular.js @@ -81,6 +81,7 @@ -assertNotHasOwnProperty, -getter, -getBlockElements, + -hasOwnProperty, */ @@ -96,7 +97,7 @@ * @returns {string} Lowercased string. */ var lowercase = function(string){return isString(string) ? string.toLowerCase() : string;}; - +var hasOwnProperty = Object.prototype.hasOwnProperty; /** * @ngdoc function diff --git a/src/ng/filter/filter.js b/src/ng/filter/filter.js index eabe84a7..2bb0d174 100644 --- a/src/ng/filter/filter.js +++ b/src/ng/filter/filter.js @@ -136,6 +136,15 @@ function filterFilter() { }; } else { comparator = function(obj, text) { + if (obj && text && typeof obj === 'object' && typeof text === 'object') { + for (var objKey in obj) { + if (objKey.charAt(0) !== '$' && hasOwnProperty.call(obj, objKey) && + comparator(obj[objKey], text[objKey])) { + return true; + } + } + return false; + } text = (''+text).toLowerCase(); return (''+obj).toLowerCase().indexOf(text) > -1; }; |
