तो अगर मैं एक सरणी है:क्या किसी अन्य सरणी में contution द्वारा angular.js फ़िल्टर करना संभव है?
$scope.letters =
[{"id":"a"},
{"id":"b"},
{"id":"c"}];
और एक और सरणी
$scope.filterBy = ["b","c","d"];
और मैं कुछ एनजी-दोहराने केवल आइटम है कि $ filterBy में प्रदर्शित द्वारा $ scope.letters फिल्टर करने के लिए करना चाहते हैं।
मैं के प्रभाव के लिए कुछ करने के लिए सक्षम होना चाहते हैं:
<span ng-repeat="{{letter in letters|filter: letter.id in filterBy }} > {{letter.id}} </span>
और यह ख प्रिंट है, ग
मैं जानता हूँ कि यह एक बहुत बेवकूफ उदाहरण है, लेकिन वहाँ के लिए एक रास्ता है किसी अन्य सरणी ऑब्जेक्ट की सामग्री के आधार पर an कोणीय.जेएस अभिव्यक्ति फ़िल्टर करें?
angular.module('Test', []);
function Ctrl($scope) {
$scope.letters = [
{id: 'a'},
{id: 'b'},
{id: 'c'}
];
$scope.filterBy = ['b', 'c', 'd'];
$scope.filteredLetters = function() {
return $scope.letters.filter(function (letter) {
return $scope.filterBy.indexOf(letter.id) !== -1;
});
};
}
Ctrl.$inject = ['$scope'];
एचटीएमएल:
<div ng-repeat='letter in filteredLetters(letters)'>{{letter.id}}</div>
आप live example कोशिश कर सकते हैं
जे एस:
फ़िल्टर किए गए लिटर() को _every_ पाचन चक्र कहा जाएगा। तो यदि आपके पास अपने दृश्य में एनजी-मॉडल का उपयोग करके इनपुट फ़ील्ड में है, तो इसका मतलब है कि प्रत्येक कीस्ट्रोक। एक नए $ स्कोप संपत्ति पर फ़िल्टर के परिणामों को स्टोर करना बेहतर होगा। यदि 'अक्षर 'या' फ़िल्टरबी' परिवर्तन 'फ़िल्टर परिणामों को अपडेट करने के लिए $ watch() es का उपयोग करें। –
अच्छा बिंदु। सलाह के लिए धन्यवाद। – ValeriiVasin
हालांकि यह काम करेगा (बशर्ते आपका ऐप बहुत आसान हो) मैं इस दृष्टिकोण का उपयोग करने की अनुशंसा नहीं करता - जैसा कि @ मार्ककाजकोक उल्लेख करता है, इसे प्रत्येक पाचन चक्र कहा जाता है जिसका अर्थ है कि प्रदर्शन भयानक है और मुझे कोणीय से त्रुटियां मिल रही हैं जैसे "त्रुटि: [$ रूटस्कोप: infdig] 10 $ पाचन() पुनरावृत्तियों तक पहुंचे। निरस्त! " –