sql >> Databáze >  >> NoSQL >> MongoDB

ng-pokud je voláno vícekrát, než by mělo

Váš ng-if bude volána v každé smyčce digest. Problém je v tom, že obsahuje výraz zahrnující volání funkce. Angular nemá žádný způsob, jak zjistit, kdy se výsledek výrazu může změnit, takže jej volá pokaždé.

Lepší možností by bylo nastavit příznak v každém z kanálů a pomocí ng-if pouze otestovat příslušný příznak. Pak stačí aktualizovat příznaky kdykoli $scope.activeCategory změny, které můžete provést buď pomocí kódu, kde nastavujete kategorii, nebo pomocí $scope.$watch() pro automatické spuštění.

např.

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

Poté ve vaší šabloně:

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

by měl být efektivnější.




  1. Opačné pořadí položek vytažených z databáze v ng-repeat

  2. Jak používat $in nebo $nin v mongo agregaci $group $cond

  3. Jak definovat rozsah shardingu pro každý shard v Mongo?

  4. Seznam všech kolekcí v databázi mongo v Javě