2012-12-12 14 views
7

मेरे पास उपयोगकर्ता वस्तु नीचे दी गई है।AngularJS का उपयोग करके एकाधिक ऑब्जेक्ट्स पर फ़िल्टर कैसे लागू करें?

$scope.users = [{id: 1, name: 'Adam', friends: [{name: 'John', age: 21, sex: 'M'}, {name: 'Brad', age: 32, sex: 'M'}]}] 

तब मैं है निम्नलिखित कोड:

<div ng-repeat="user in users> 
<input type="text" ng-model="searchText"> 
<div ng-repeat="friend in user.friends | filter:searchText"> 
    {{user.name}} {{friend.name}} {{friend.age}} 
</div> 
</div> 

अब जब मैं पाठ बॉक्स में टाइप पाठ: 'searchText', मैं फिल्टर उपयोगकर्ता का नाम और नाम प्रदर्शित करना चाहते हैं/दोस्त की उम्र क्या कोई मेरी मदद कर सकता है कि यह कैसे करें?

यदि मैं सही हूं, तो मुझे लगता है कि मुझे इसके लिए एक कस्टम फ़िल्टर बनाने की आवश्यकता है या क्या मैं इसे पूरा कर सकता हूं?

उत्तर

14

क्योंकि आप एक बार में दो बातों पर फ़िल्टर करना चाहते हैं - दोस्तों सरणी के कुछ गुण है और यह भी उपयोगकर्ता - आप बनाने की आवश्यकता होगी अपनी खुद की custom filter कि 2 अतिरिक्त पैरामीटर स्वीकार :

myApp.filter('myFilter', function() { 
    return function(friends, searchText, username) { 
    var searchRegx = new RegExp(searchText, "i"); 
    if ((searchText == undefined) || (username.search(searchRegx) != -1)) { 
     return friends; 
    } 
    var result = []; 
    for(i = 0; i < friends.length; i++) { 
     if (friends[i].name.search(searchRegx) != -1 || 
      friends[i].age.toString().search(searchText) != -1) { 
      result.push(friends[i]); 
     } 
    } 
    return result; 
    } 
}); 

तो इतना है कि यह फोन:

<div ng-repeat="user in users"> 
    <input type="text" ng-model="searchText"> 
    <div ng-repeat="friend in user.friends | myFilter:searchText:user.name"> 
     {{user.name}} {{friend.name}} {{friend.age}} 
    </div> 
</div> 

": searchText: user.name" एक कस्टम फ़िल्टर में अतिरिक्त तर्क पारित करने का तरीका है।

Fiddle

+0

धन्यवाद बहुत अधिक मार्क! लेकिन यह फ़िल्टरफिल्टर (दोस्तों, सर्चटेक्स्ट) दोस्तों की सभी वस्तुओं यानी नाम, आयु, लिंग या अन्यथा केवल नाम और आयु पर फ़िल्टर करेगा। मेरी आवश्यकता है कि मैं केवल 'नाम' और 'आयु' को खोजने योग्य होना चाहता हूं और परिणामों को केवल मित्रों की इन दो वस्तुओं पर फ़िल्टर किया जाना चाहिए, क्योंकि वे फ़ील्ड प्रदर्शित हो रहे हैं, न कि 'सेक्स' –

+0

पर अपडेट किए गए उत्तर देखें। –

+0

मुझे एहसास है कि यह कितना पुराना है ... लेकिन क्या हो रहा है जब मेरे इनपुट की 'सर्चटेक्स्ट' हमेशा फ़िल्टर के अंदर अपरिभाषित हो? मुद्दों को स्कॉइंग करना, जाहिर है, लेकिन क्यों? – Clev3r

1

http://docs.angularjs.org/api/ng.filter:filter

<div ng-repeat="user in users> 
<input type="text" ng-model="search.$"> 
<div ng-repeat="friend in user.friends | filter:search"> 
    {{user.name}} {{friend.name}} {{friend.age}} 
</div> 
</div> 
+1

धन्यवाद फास्टलोड! इससे मदद मिलती है! लेकिन यह ऑब्जेक्ट क्या फ़िल्टर करेगा? क्या यह केवल ** उपयोगकर्ता के नाम ** और ** मित्र का नाम और आयु ** पर फ़िल्टर करेगा? –

+0

जैसा कि प्रलेखन में वर्णित है, यह ऑब्जेक्ट्स की सरणी के अंदर किसी ऑब्जेक्ट के सभी गुणों की खोज करेगा। आप एक जादू वाइल्डकार्ड के रूप में '$' के बारे में सोच सकते हैं। –

+0

धन्यवाद फास्टलोड! यहां मेरे मित्र वस्तु में मेरे पास तीन विशेषताएं हैं: नाम, आयु और लिंग। लेकिन मैं नहीं चाहता कि सेक्स खोजने योग्य हो। क्या कोई तरीका है कि मैं इसे प्राप्त कर सकता हूं? –

संबंधित मुद्दे