sql >> Base de Datos >  >> NoSQL >> MongoDB

ng-si está siendo llamado más veces de lo que debería

Tu ng-if se llamará en cada ciclo de resumen. El problema es que contiene una expresión que implica una llamada de función. Angular no tiene forma de saber cuándo podría cambiar el resultado de la expresión, por lo que lo llama cada vez.

Una mejor opción sería establecer una bandera en cada uno de los canales y usar ng-if para probar la bandera relevante. Luego, solo tiene que actualizar las banderas cada vez que $scope.activeCategory cambios que puede hacer con el código donde establece la categoría o usando $scope.$watch() para activarlo automáticamente.

por ejemplo

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

Luego en su plantilla:

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

debería ser más eficiente.