Если ваша коллекция не изменится, вы можете использовать одноразовое связывание:
<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);
}
});
};
}
};
}];
}
);
, к сожалению, один раз связывания на сбор не будет хорошо, как мне нужно, чтобы добавить/удалить/редактировать элементы в коллекции. Я проверил код для карусели, который находится на Github https://github.com/angular-ui/bootstrap/blob/master/src/carousel/carousel.js, но не видит использования $ appy. –
oh that sucks :(но, по крайней мере, это объясняет, почему мои фильтры продолжают переиспускать, спасибо за помощь. Думаю, что в этом случае я найду какое-то другое решение для каруселей :) –
О, это получается даже проблема с этим тоже https://github.com/revolunet/angular-carousel –