Uw ng-if
wordt op elke digest-lus aangeroepen. Het probleem is dat het een expressie bevat met een functieaanroep. Angular heeft geen manier om te weten wanneer het resultaat van de uitdrukking zou kunnen veranderen, dus het roept het elke keer aan.
Een betere optie zou zijn om een vlag in elk van de kanalen in te stellen en ng-if te gebruiken om alleen de relevante vlag te testen. Dan hoef je alleen maar de vlaggen bij te werken wanneer $scope.activeCategory
wijzigingen die u kunt doen met code waar u de categorie instelt of door $scope.$watch()
te gebruiken om het automatisch te activeren.
bijv.
$scope.setCategory = function (name) {
$scope.activeCategory = name;
for (var index=0; index < $scope.channels.length; index++) {
$scope.channels[index].hasCategory = hasCategory($scope.channels[index].category, name);
}
};
function hasCategory(categoryNameArray, name) {
console.log('thisisbeingcalled');
var e = _.indexOf(categoryNameArray, name);
if (e === -1) {
return false;
} else {
return true;
}
}
Dan in je sjabloon:
<md-card flex="15" flex-xs="40" class="slide-up" layout="column"
ng-repeat="channel in channels | orderBy: 'number' | filter: queryname"
ng-if="channel.hasCategory"
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>
zou efficiënter moeten zijn.