से अधिक बार कहा जा रहा है, तो मैं चयनित श्रेणी के आधार पर कुछ चैनल फ़िल्टर करने की कोशिश कर रहा हूं।एनजी-अगर इसे
$scope.hasCategory = function (categoryNameArray) {
console.log('thisisbeingcalled');
var e = _.indexOf(categoryNameArray, $scope.activeCategory);
if (e === -1) {
return false;
} else {
return true;
}
};
और:
db.channels.find().pretty()
{
"_id" : "2kj9GK8jE9yHezoWb",
"name" : "example name",
"logo" : "path/to/image.svg",
"number" : 2,
"category" : [
"Broadcast",
"Premium"
],
"tags" : "example tag tags"
}
इस समारोह को संभालने के लिए एनजी-यदि है:
मैं जो एक ng-if="hasCategory(channel.category)
है यहाँ दस्तावेज़ है channel in channels
के एनजी-दोहराने है इस प्रकार मैंने सक्रिय श्रेणी सेट की है:
$scope.setCategory = function (name) {
$scope.activeCategory = name;
};
जो मैं ध्यान में रखते हुए बटन पर क्लिक करके भेजें:
<section layout="row" layout-align="center center" layout-wrap ng-init="activeIndex; activeCategory">
<md-button flex="auto" flex-sm="45" flex-xs="100" ng-repeat="kit in kits | orderBy: 'order'" ng-class="{active: (activeIndex.index == $index)}" class="md-raised">
<a href="" ng-click="activeIndex.index = $index; setCategory(kit.name);" class="bold">{{kit.name}}</a>
</md-button>
</section>
यहाँ
किट दस्तावेज़ स्कीमा है:
db.kits.find().pretty()
{ "_id" : "k7JFX6DHu5GYnyer3", "name" : "Broadcast", "order" : 1 }
{ "_id" : "KrKRm4gysw5sfQnnr", "name" : "Premium", "order" : 2 }
{ "_id" : "dieukQ3NRsA44CSns", "name" : "Ultimate", "order" : 3 }
अब मैं केवल एक चैनल के इस परीक्षण करने के लिए, लेकिन हर बार मैं क्लिक करें श्रेणी बदलने के लिए बटन, $scope.hasCategory
फ़ंक्शन को पृष्ठ के स्टार्टअप पर पहली बार भी कॉल किया जाता है (पहली बार लोड हो रहा है)
मेरे पास वर्तमान श्रेणी में चैनलों की खोज करने के लिए एक खोज बार भी है, मुझे यकीन नहीं है कि इससे यह भी प्रभावित होता है। मैं जब
<input type="text" ng-model="queryname" ng-model-options="{debounce: 500}">
अब यह वास्तव में laggy हो जाता है एक 100 चैनलों की तुलना में अधिक, एनजी-यदि एक से अधिक 10k बार है, जो काफी देर के लिए पेज फ्रीज बनाता है कहा जाता हो जाता है।
इस समस्या को हल करने के लिए मैं क्या कर सकता हूं?
संपादित
जहां ng-if
था जोड़ने के लिए भूल:
<md-card flex="15" flex-xs="40" class="slide-up" layout="column" ng-repeat="channel in channels | orderBy: 'number' | filter: queryname" ng-if="hasCategory(channel.category)" ng-init="channel.edit = false">
<md-card-header ng-show="channel.edit == false">
<img ng-src="{{channel.logo}}" alt="">
</md-card-header>
<md-card-header-text ng-show="channel.edit == false">
<span class="md-subhead dark-blue" layout="row" layout-align="center" layout-margin>{{channel.number}}</span>
</md-card-header-text>
</md-card>
आह, बहुत बहुत धन्यवाद! मैंने आपके कोड में '$ scope.channels [index] जैसे कुछ tweaks किया था।hasCategory = hasCategory ($ scope.channels [index]। श्रेणी, नाम); 'और अब यह काम कर रहा है, एक और सवाल यह है कि, प्रारंभिक श्रेणी कैसे सेट करें ताकि उपयोगकर्ता को चैनल देखने के लिए किसी श्रेणी का चयन न करना पड़े । आपकी विधि में –
है श्रेणी()। आपको अपना रिटर्न वैल्यू 'रिटर्न' में बदलना चाहिए! (ई === -1) '। यह अधिक पठनीय – Riverside
@ रिवरसाइड है, सहमत है कि यह एक सुधार होगा, लेकिन जब मैं प्रश्नों का उत्तर देता हूं तो मैं मूल से कोड में परिवर्तन को न्यूनतम रखने की कोशिश करता हूं अन्यथा वास्तव में उत्तर के लिए आवश्यक परिवर्तनों को अस्पष्ट करने का जोखिम होता है। – Duncan