0

j'ai une directive carrousel photo comme çaComment envoyer param filtrée à une directive

<mz-photo-carousel items-per-slide=6 
        carousel-data="vm.carouselData"> 
</mz-photo-carousel> 

dans la directive est juste html pour montrer carrousel avec les données transmises

<div uib-carousel active="active" no-wrap="noWrapSlides"> 
    <div uib-slide ng-repeat="slide in vm.carouselData"> 
    .... 
    </div> 
</div> 

Je veux envoyer données filtrées à la directive mz-photo-carrousel comme celui-ci:

<mz-photo-carousel items-per-slide=6 
        carousel-data="vm.carouselData | myFilter:param"> 
</mz-photo-carousel> 

Je ne veux pas filtrer à l'intérieur du directive mz-photo-carousel parce que je veux qu'il reste générique pour ne traiter que les données qu'il obtient.

+0

Ce code ne suffit pas de comprendre la question, pourriez-vous s'il vous plaît partager un [jsFiddle] (https://jsfiddle.net/) avec le problème! –

+0

voici un JSFiddle pour vous les gars: http://jsfiddle.net/y9arvut1/1/ regardez cette ligne de code: Im essayant de passer un tableau filtré à la directive et j'obtiens des erreurs dans la console –

Répondre

0

Le problème est que puisque vous définissez la liaison de données bidirectionnelle à l'attribut array.

référence provenant de la SO Réponse:

SO Answer

Lorsque vous passez travail de filtre à votre directive, angulaire placera une montre sur vos variables emplois. Ainsi, lorsque des tâches sont assignées dans la surveillance de la consigne, est appelée, ce qui déclenche à nouveau le filtrage, et cela continue jusqu'à ce que le cycle de digestion maximum soit atteint par angulaire.

Pour éviter cette situation, vous pouvez créer une méthode de filtrage et transmettre cette méthode dans ng-model. De cette façon, vous pouvez éviter la création de copie et l'erreur de cycle de digestion maximale .

Donc, pour éliminer l'erreur. Utilisez le filtre à l'intérieur de la directive en utilisant le JS ci-dessous. La démo est également fournie.

JSFiddle Demo

JS:

var demo = angular.module('demo', []); 
demo.directive('arrayDisplay', function($parse, $filter){ 
    return { 
     restrict: 'E', 
     replace: true, 
     transclude: false, 
     scope: {array: '=', from: '=', to:'='}, 
     template: '<span>{{array}}<span>after the filter is applied : {{filtered}}</span></span>', 
     link: function(scope, element, attrs){ 
      scope.filtered = $filter('slice')(scope.array, scope.from, scope.to); 
     } 
    } 
}); 

demo.filter('slice', function() { 
    return function(input, from, to) { 
     return input.slice(from, to); 
    }; 
}) 

function MyCtrl ($scope) { 
    $scope.array = [1,2,3,4,5,6,7,8,9,10]; 

}; 
+0

Cette réponse n'est pas vraiment utile, comme je l'ai déjà dit, je ne veux pas utiliser le filtre à l'intérieur de la directive Je veux utiliser le filtre $ dans la fonction de lien ou le filtre dans la directive html ou toute autre option qui me force à filtrer dans la directive. Je veux simplement filtrer en dehors de la directive et obtenir la valeur filtrée comme param à la directive comme je le montre dans la démo –

+0

@RonYaari Ok je comprends, vous avez un problème avec cette méthode, une autre option est d'utiliser '$ watch', référez-vous s'il vous plaît [JSFiddle] (http://jsfiddle.net/zmjn5q33/), mais s'il vous plaît noter, si vous utilisez le filtrage comme ce qui est fait de violon que vous avez, cela déclenchera l'erreur '10 $ digest() itérations atteint.' –

+0

ce que vous avez offert avec la montre $ toujours pas assez bon pour mon cas, parce que vous filtrez toujours le tableau dans le contrôleur, ma question simple est que si de toute façon pour le filtrer comme ceci: