2012-12-11 15 views
17

मेरे पास उपयोगकर्ता वस्तु नीचे दी गई है। मैं नाम के लिए परिणाम, उम्र के साथ-साथ सेक्स प्राप्त जब भी मैं खोजकेवल कुछ वस्तुओं पर AngularJS फ़िल्टर

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

यहाँ,:

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

मैं निम्नलिखित कोड है। लेकिन मैं केवल नाम और उम्र के लिए खोजना चाहता हूं और मैं नहीं चाहता कि लिंग खोजे जा सके। क्या कोई मेरी मदद कर सकता है कि मैं इसे कैसे प्राप्त कर सकता हूं?

+0

आप नमूना क्वेरी के साथ आपके सवाल का अद्यतन करें और आप चाहते हैं हो सकता है। आपकी टिप्पणी में (नीचे) आप एक इनपुट फ़ील्ड को कई फ़ील्ड खोजने के लिए चाहते हैं लेकिन आप किस प्रकार के प्रश्नों को दर्ज करना चाहते हैं? – fredrik

उत्तर

16

मुझे यकीन है कि अगर यह है कि तुम क्या कर रहे हैं के बाद नहीं कर रहा हूँ। यदि आप एकाधिक गुणों से मेल खाने के लिए एक इनपुट फ़ील्ड रखना चाहते हैं तो आपको filter पर पारित करने के लिए एक फ़िल्टर फ़ंक्शन की आवश्यकता है।

$scope.user = {id: 1, friends: [{name: 'John', age: 21, sex: 'M'}, {name: 'Brad', age: 32, sex: 'M'}, {name: 'May', age: 64, sex: 'F'}]}; 

$scope.searchFilter = function (obj) { 
    var re = new RegExp($scope.searchText, 'i'); 
    return !$scope.searchText || re.test(obj.name) || re.test(obj.age.toString()); 
}; 

यहाँ एक बेला उदाहरण है http://jsfiddle.net/fredrik/26fZb/1/

+0

धन्यवाद बहुत fredrik! हाँ, यह वही है जो मैं देख रहा हूँ! लेकिन मुझे यहां कोई समस्या है। मुझे हमेशा $ scope.searchText ** अपरिभाषित ** मिलता है। मुझे $ स्कोप के विकल्प के रूप में नियंत्रक के अंदर परिभाषित केवल फ़ंक्शंस और वर्र्स मिल रहे हैं और ** एनजी-मॉडल = सर्चटेक्स्ट ** यहां $ स्कोप में नहीं मिल रहे हैं। –

+0

$ scope.searchText तब तक अपरिभाषित नहीं होगा जब तक आप इनपुट फ़ील्ड में कुछ दर्ज नहीं कर लेते। क्या आप अपना प्रश्न उस संपूर्ण कोड के साथ अपडेट कर सकते हैं जिसका आप उपयोग कर रहे हैं? – fredrik

+0

क्या खोज में विशेष वर्ण शामिल करने का कोई तरीका है। अगर मैं टाइप करता हूं '?' खोज क्षेत्र में यह मुझे त्रुटि फेंक देता है 'अमान्य नियमित अभिव्यक्ति: /? /: दोहराने के लिए कुछ भी नहीं' – user1153484

21

आप दो खोज क्षेत्रों

<div ng-repeat="friend in user.friends | filter:{name:searchNameText, age:searchAgeText}"> 

नहीं तो आप एक कस्टम या पास दोनों के लिए एक ही क्षेत्र का उपयोग करने के फिल्टर, लिखने के लिए की आवश्यकता होगी हो सकता है अगर इस लक्ष्य को हासिल करने के लिए दूसरा पैरामीटर के रूप में एक वस्तु पारित कर सकते हैं डॉक्स में वर्णित तीसरे पैरामीटर के रूप में एक कस्टम फ़िल्टर फ़ंक्शन।

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

+0

धन्यवाद बहुत अमीर! लेकिन मेरे पास दो खोज फ़ील्ड नहीं हो सकते हैं। क्या आप मेरी मदद कर सकते हैं कि मैं दोनों के लिए एक ही क्षेत्र का उपयोग कैसे कर सकता हूं? –

+8

वैसे, यह एक एंड-सर्च करेगा, न कि एक के रूप में या आप उम्मीद कर सकते हैं ... – Geert

0

एक अन्य संभावित दृष्टिकोण एक बनाने के लिए है समेकित फ़ील्ड जिसमें उन सभी फ़ील्ड के मान शामिल हैं जिन्हें आप संयोजित करना चाहते हैं और केवल उस पर फ़िल्टर करना चाहते हैं।

+1

मुझे यह जवाब पसंद नहीं है, लेकिन यह अब तक का सबसे आसान है। पोस्ट करने का शुक्रिया – Patrick

1

यह आप जो चाहते हैं उसे पूरा करने का सबसे साफ तरीका नहीं है, लेकिन यह मानक एनजी-दोहराना फ़िल्टर का उपयोग करके एक फ़िल्टर को पूरा करने का सबसे आसान तरीका है।

नियंत्रक:

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

$scope.buildSearchData = buildSearchData; 

function buildSearchData(friend){ 
    return friend.name + ' ' + friend.age; 
} 

एचटीएमएल

<input type="text" ng-model="searchText"> 
<div ng-repeat="friend in user.friends | filter:{searchData:searchText}" 
    ng-init="friend.searchData = buildSearchData(friend)"> 
    {{friend.name}} {{friend.age}} 
</div> 
संबंधित मुद्दे