sql >> Database teknologi >  >> NoSQL >> MongoDB

ng-hvis bliver ringet op flere gange, end det burde

Din ng-if vil blive kaldt på hver digest-loop. Problemet er, at det indeholder et udtryk, der involverer et funktionskald. Angular har ingen måde at vide, hvornår resultatet af udtrykket kan ændre sig, så det kalder det hver gang.

En bedre mulighed ville være at sætte et flag i hver af kanalerne og bruge ng-if til blot at teste det relevante flag. Så skal du bare opdatere flagene hver gang $scope.activeCategory ændringer, som du enten kan foretage med kode, hvor du indstiller kategorien eller ved at bruge $scope.$watch() for at udløse den automatisk.

f.eks.

$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;
  }
}

Så i din skabelon:

<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>

burde være mere effektiv.




  1. opdater flere poster ved hjælp af mongoosejs i node

  2. Docker-compose med Loopback og Mongodb kan ikke forbinde mongdb

  3. findAndModify - MongoError:undtagelse:skal angive fjernelse eller opdatering

  4. Hvorfor er der en understregning foran MongoDb dokument-id?