J'utilise deux directives dans ce code HTML:sélecteur de requête dans imbriquées AngularJS directives
<div animations>
<h2>Title</h2>
<span class="animateBtn">Animate!</span>
<info-section></info-section>
</div>
Le premier est un attribut directive:
angular.module('app').directive('animations', ['$window', ($window: any) => {
return {
restrict: "A",
link: function ($scope: any, element: any, attrs: any) {
angular.element(document).ready(() => {
let animateBtns = angular.element(element[0].querySelector('.animateBtn'));
if (animateBtns && animateBtns.length) {
for (let i = 0, animateBtnsLength = animateBtns.length; i < animateBtnsLength; i++) {
let currentBtn = animateBtns[i];
currentBtn.addEventListener("click", function() {
.... other code....
});
}
}
..... other code .....
});
}
};
}])
Ainsi, il fait tout simplement un querySelector à sélectionnez tous les boutons qui, au clic, doivent commencer une certaine fonction. Et ça marche. Le problème est que la deuxième directive contient également un « animateBtn »:
.directive('infoSection', function() {
return {
replace: true,
restrict: 'E',
template: '<div><span class="animateBtn">Animate with this too</span></div>'
}
});
Le problème est que dans la première directive (même si je l'utilisateur (document) .ready()), le rendement du sélecteur juste un élément (le span sous le titre), et il n'inclut pas le "animateBtn" de la deuxième directive.
Ici vous trouverez le code complet: PLNKR
Vous ne devriez pas essayer de trouver les autres éléments DOM avec un querySelector. Si vous voulez avoir des relations parent-enfant entre les directives, communiquez entre elles via leur contrôleur et laissez les directives enfants fournir les éléments DOM auxquels elles sont liées au parent. –
J'ai ajouté un Plunker, vous pouvez le trouver ici: https://plnkr.co/edit/ZzcowjuiYO4dCtlyC22Q?p=preview – panagulis72
Comme Oliver l'a déjà dit, ce que vous faites est faux. De plus, vous ne devriez jamais mettre des gestionnaires d'événements sur le code en angulaire comme ça - c'est une façon jQuery. Essayez de lire ceci, pourrait vous aider à trouver de meilleurs concepts pour angularjs: https://gabrieleromanato.name/introduction-to-angularjs-for-jquery-developers Après l'avoir lu, essayez de le recréer de manière AngularJS et peut-être essayer d'utiliser ng- animer pour animer des choses dans angularjs: https://docs.angularjs.org/api/ngAnimate – pegla