1

Как я могу предотвратить карусель, запускающий полный цикл дайджеста, и повторный запуск фильтра коллекции каждый раз, когда он переходит на новое изображение.Угловой бутстрап карусельный дайджест

Плункер, показанный ниже, показывает, что я имею в виду, если вы нажмете элемент и посмотрите журнал. http://plnkr.co/edit/X062Xr90G807uqURqts9?

<carousel disable-ng-animate ng-click="$event.stopPropagation();" interval="5000"> 
     <slide ng-repeat="photo in object.photos" active="photo.active"> 
      <img ng-src="{{photo.getUrl({'maxWidth': 350, 'maxHeight': 250})}}" style="margin:auto;"> 
     </slide> 
    </carousel> 

ответ

1

Если ваша коллекция не изменится, вы можете использовать одноразовое связывание:

<div ng-repeat="item in ::collection | example" ng-click="setSelected(item)"> 

Вот updated plunker

Но если это не хорошо для вас, вы должны войти в директиву carousel, и посмотрите, видите ли вы $apply.
$apply приведет к $rootScope.$digest, и из-за этого filter будет срабатывать при любых изменениях.

EDIT

Посмотрев на carousel.html (шаблон директивы)

вы можете увидеть ng-mouseenter="pause()" ng-mouseleave="play()".

Это встроенная угловая директива и угловое использование за кулисами $apply, поэтому я не вижу никакого способа избежать полного переучета по карусельной директиве.

Вот угловой код:

forEach(
    'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste'.split(' '), 
    function(eventName) { 
    var directiveName = directiveNormalize('ng-' + eventName); 
    ngEventDirectives[directiveName] = ['$parse', '$rootScope', function($parse, $rootScope) { 
     return { 
     restrict: 'A', 
     compile: function($element, attr) { 
      // We expose the powerful $event object on the scope that provides access to the Window, 
      // etc. that isn't protected by the fast paths in $parse. We explicitly request better 
      // checks at the cost of speed since event handler expressions are not executed as 
      // frequently as regular change detection. 
      var fn = $parse(attr[directiveName], /* interceptorFn */ null, /* expensiveChecks */ true); 
      return function ngEventHandler(scope, element) { 
      element.on(eventName, function(event) { 
       var callback = function() { 
       fn(scope, {$event:event}); 
       }; 
       if (forceAsyncEvents[eventName] && $rootScope.$$phase) { 
       scope.$evalAsync(callback); 
       } else { 
       scope.$apply(callback); 
       } 
      }); 
      }; 
     } 
     }; 
    }]; 
    } 
); 
+0

, к сожалению, один раз связывания на сбор не будет хорошо, как мне нужно, чтобы добавить/удалить/редактировать элементы в коллекции. Я проверил код для карусели, который находится на Github https://github.com/angular-ui/bootstrap/blob/master/src/carousel/carousel.js, но не видит использования $ appy. –

+0

oh that sucks :(но, по крайней мере, это объясняет, почему мои фильтры продолжают переиспускать, спасибо за помощь. Думаю, что в этом случае я найду какое-то другое решение для каруселей :) –

+0

О, это получается даже проблема с этим тоже https://github.com/revolunet/angular-carousel –

Смежные вопросы