MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

ng-if sendo chamado mais vezes do que deveria


Seu ng-if será chamado em cada loop digest. O problema é que ele contém uma expressão envolvendo uma chamada de função. Angular não tem como saber quando o resultado da expressão pode mudar, então ele a chama toda vez.

Uma opção melhor seria definir um sinalizador em cada um dos canais e usar ng-if apenas para testar o sinalizador relevante. Então você só precisa atualizar os sinalizadores sempre que $scope.activeCategory alterações que você pode fazer com o código onde você define a categoria ou usando $scope.$watch() para acioná-lo automaticamente.

por exemplo.
$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;
  }
}

Em seguida, no seu modelo:
<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>

deveria ser mais eficiente.