sql >> Database >  >> NoSQL >> MongoDB

ng-if vaker gebeld worden dan zou moeten

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.




  1. Draai rijen naar kolommen in MongoDB

  2. render_template met meerdere variabelen

  3. MongoDB/PHP verwijdert een specifiek array-item in het document

  4. hoe te controleren of mongodb actief is en klaar is om verbindingen van bash-script te accepteren?