Parce que je viens d'entrer en contact avec Angular, certains concepts sont encore très vagues. J'ai essayé de trouver la réponse à cette question via Google, mais je n'ai pas trouvé de réponse appropriée, j'aimerais donc vous la poser ici. est un code approximatif :
<p ng-repeat="item in list" class="need-another-js"></p>
<script>
$('.need-another-js').click(function(){
// do something
})
</script>
Si ng-repeat
est supprimé, l'effet du code JS peut être obtenu, mais après l'ajout de ng-repeat
, l'effet n'existe pas. Est-ce à cause du problème de portée angulaire ?
Cela n'a rien à voir avec la portée, c'est purement une forme d'erreur typique de
Les instructionsjquery
=>angular
.AngularJS
, en tant qu'API "déclarative", sont très différentes de l'API "impérative" dejquery
Il est facile de faire des erreurs lorsque vous les mélangez.Erreur de bon sens,
id
est utilisé pour indiquer le caractère unique d'un élément, mais vous l'avez utilisé surng-repeat
, ce qui signifie qu'il peut y avoir plusieursid
éléments, qui sont tousneed-another-js
. Cela n'a rien à voir avecjquery
ouangular
, c'est purementhtml
manque de connaissancesng-repeat
, comme l'instruction fournie parangular
, doit passer par les processusangular
etcompile
delinking
. Par conséquent, lorsque votre$('#need-another-js').click
enregistre un événement. pour l'élément#need-another-js
, cet élément n'a pas réellement été généré dansangular
parDOM
, et c'est la clé pour qu'il ne prenne pas effet.Juste pour votre exemple, vous pouvez apporter les modifications suivantes pour le rendre efficace :
Bien que je ne recommande pas cette façon d'écrire, puisque vous avez choisi de mélanger "impératif" et
声明式
API, vous devez avoir vos raisons.Supplément :
Concernant le fonctionnement de
angular
, je pense qu'il est utile pour les étudiants qui débutent de lire cette introduction sur le site officiel :Adresse du document : concepts
angular a un événement de liaison qu'il prend en charge ng-click
Vous pouvez essayer de l'écrire comme ça
Quand j'apprenais Angular, je suis passé directement de jq à angulaire. Angular peut faire tout ce que jq peut faire
.ng-repeat consiste à ajouter dynamiquement des éléments dom. Si vous utilisez la méthode click pour lier des événements à des éléments ajoutés dynamiquement, cela ne sera pas déclenché. Si vous aimez utiliser jquery, utilisez la méthode proposée par leftstick, mais il est recommandé d'utiliser la méthode angulaire proposée par mumofa