


Explication détaillée de la méthode $apply() dans angulaireJS_AngularJS
Pour moi, complètement novice en front-end, je connais encore peu Javascript. Si je veux me lancer directement avec Angular JS, je rencontre beaucoup de résistance. Cependant, je crois que tant que nous travaillerons dur, même les conceptions anti-humaines ne poseront pas de gros problèmes.
Bon, plus de bêtises. Afin de comprendre ce qu'est Angular JS, j'ai commencé avec Scope. Alors, qu’est-ce que Scope ? Emprunter un passage au document officiel :
"La portée est un objet qui fait référence au modèle d'application. C'est un contexte d'exécution pour les expressions. Les portées sont organisées selon une structure hiérarchique qui imitent la structure DOM de l'application. Les portées peuvent surveiller les expressions et propager des événements."
Après avoir lu ceci, par analogie avec d'autres langages de programmation, je pense que Scope est comme la portée du modèle de données, fournissant un contexte pour l'exécution des expressions. Comprenons-le de cette façon pour l'instant.
Caractéristiques de la portée
Ensuite, voyons quelles sont les fonctionnalités de Scope ?
Scope fournit la méthode $watch pour surveiller les modifications du modèle.
Scope fournit la méthode $apply pour propager les modifications du modèle.
La portée peut être héritée pour isoler différents composants d’application et autorisations d’accès aux propriétés.
La portée fournit un contexte pour l’évaluation des expressions.
Concernant ces quatre fonctionnalités, comme j'ai déjà étudié ActionScript, C et Java, les premier, troisième et quatrième points ne sont pas difficiles à comprendre, mais le deuxième point semble un peu flou. Conformément au principe de demander des réponses, j'ai quand même trouvé certaines choses grâce à Google. Pour les vétérans expérimentés, veuillez taper sur les briques !
Origine Javascript
Tout d'abord, à première vue, scope.apply() semble être une méthode ordinaire pour mettre à jour les liaisons. Mais réfléchissez un peu plus, pourquoi en avons-nous besoin ? Quand est-il habituellement utilisé ? Pour comprendre ces deux problématiques, il faut commencer par Javascript. Dans le code Javascript, il est exécuté dans un certain ordre. Lorsque vient le tour d'un fragment de code d'être exécuté, le navigateur n'exécutera que le fragment en cours et ne fera rien d'autre. Ainsi, parfois, certaines pages Web qui ne sont pas très bien réalisées restent bloquées après avoir cliqué sur quelque chose. Le fonctionnement de Javascript est une des raisons de ce phénomène ! Ci-dessous nous avons un morceau de code pour le ressentir :
var bouton = document.getElementById('clickMe');
bouton de fonctionClicked () {
alert('le bouton a été cliqué');
>
bouton.addEventListener('clic', boutonClicked);
fonction timerComplete () {
alert('minuterie terminée');
>
setTimeout(timerComplete, 5000);
Lors du chargement du code Javascript, recherchez d'abord un bouton avec un identifiant appelé "clickMe", puis ajoutez un écouteur, puis définissez un délai d'attente. Attendez 5 secondes et une boîte de dialogue apparaîtra. Si vous actualisez la page et cliquez immédiatement sur le bouton clickMe, une boîte de dialogue apparaîtra. Si vous ne cliquez pas sur OK, la fonction timerComplete n'aura jamais la possibilité de s'exécuter.
Comment mettre à jour les liaisons
Bon, après avoir parlé de choses apparemment hors de propos, revenons au sujet. Comment Angular JS sait-il quand les données changent et que la page doit être mise à jour ? Le code a besoin de savoir quand les données ont été modifiées, mais il n'existe actuellement aucun moyen de notifier directement que les données d'un objet ont changé (bien qu'ECMAScript 5 tente de résoudre ce problème, il en est encore au stade expérimental). Les stratégies actuellement les plus courantes incluent les deux solutions suivantes. La première consiste à utiliser un objet spécial afin que toutes les données ne puissent être définies qu'en appelant la méthode de l'objet au lieu de la spécifier directement via la propriété. De cette façon, toutes les modifications pourront être enregistrées et vous saurez quand la page doit être mise à jour. L’inconvénient est que nous devons hériter d’un objet spécial. L'affectation ne peut être effectuée que via object.set('key', 'value') au lieu de object.key=value. Dans des frameworks comme EmberJS et KnockoutJS, cela se fait (même si je n'y ai jamais été exposé - embarrassant). L'autre est la méthode adoptée par Angular JS, qui vérifie s'il y a des modifications de données après l'exécution de chaque séquence d'exécution de code Javascript. Cela semble inefficace et peut même avoir un impact sérieux sur les performances. Cependant, Angular JS utilise des méthodes intelligentes pour résoudre ce problème (il n'a pas encore été étudié et ce n'est pas encore clair). L'avantage est que nous pouvons utiliser n'importe quel objet à volonté, qu'il n'y a aucune restriction sur la méthode d'affectation et que nous pouvons également détecter les changements dans les données.
Pour cette solution adoptée par angulaire JS, ce qui nous intéresse, c'est le moment où les données changent, et c'est là que scope.apply() s'avère utile. Vérifier si les données liées ont changé est réellement effectué par scope.digest(), mais nous n'appelons presque jamais cette méthode directement, mais appelons la méthode scope.apply() car dans scope Dans la méthode .apply(), elle appellera le méthode scope.digest(). La méthode scope.apply() prend une fonction ou une expression, l'exécute et appelle enfin la méthode scope.digest() pour mettre à jour les liaisons ou les observateurs.
Quand utiliser $apply()
C’est toujours la même question, quand doit-on appeler la méthode apply() ? La situation est très rare. En fait, presque tout notre code est enveloppé dans scope.apply(), comme ng-click, l'initialisation du contrôleur, la fonction de rappel http, etc. Dans ces cas, nous n'avons pas besoin de l'appeler nous-mêmes. En fait, nous ne pouvons pas l'appeler nous-mêmes, sinon l'appel de la méthode apply() à l'intérieur de la méthode apply() générera une erreur. Nous avons vraiment besoin de l'utiliser si nous devons exécuter le code dans une nouvelle séquence d'exécution, et si et seulement si cette nouvelle séquence d'exécution n'est pas créée par la méthode de la bibliothèque angulaire JS, nous devons à ce stade utiliser la portée pour le code. apply() enveloppé. Utilisons un exemple pour expliquer :
fonctionCtrl ($ scope) {
$scope.message ="Attente de 2000 ms pour la mise à jour"
setTimeout (fonction () {
$scope.message="Délai d'expiration appelé !";
// AngularJS ignore la mise à jour de $scope
}, 2000);
>
Une fois le code ci-dessus exécuté, la page affichera : En attente de 2000 ms pour la mise à jour. Apparemment, la mise à jour des données n'est pas remarquée par Angular JS.
Ensuite, nous modifions légèrement le code Javascript et l'enveloppons avec scope.apply().
fonctionCtrl ($ scope) {
$scope.message ="Attente de 2000 ms pour la mise à jour"
setTimeout (fonction () {
$scope.$apply(function () {
$scope.message="Délai d'expiration appelé !";
});
}, 2000);
>
La différence cette fois-ci est que la page affichera d'abord : En attente de 2000 ms pour la mise à jour. Après avoir attendu 2 secondes, le contenu sera modifié en : Timeout appelé !. Évidemment, la mise à jour des données est remarquée par angulaire JS.
REMARQUE : nous ne devrions pas faire cela, mais utiliser la méthode de délai d'attente fournie par angulaire JS, afin qu'elle soit automatiquement encapsulée avec la méthode d'application.
La science est une épée à double tranchant
Enfin, jetons un autre regard sur les méthodes scope.apply() et scope.apply(function) ! Bien qu'Angular JS ait fait beaucoup pour nous, nous avons également perdu certaines opportunités. Vous pouvez le constater en un coup d'œil grâce au pseudocode ci-dessous :
fonction$appliquer(expr) {
essayez {
return$eval(expr);
} attraper(e) {
$exceptionHandler(e);
} enfin {
$root.$digest();
}
>
Il interceptera toutes les exceptions et ne les lancera plus. Enfin, la méthode $digest() sera appelée.
Pour résumer
La méthode $apply() peut exécuter des expressions JS angulaires en dehors du cadre angulaire, telles que des événements DOM, setTimeout, XHR ou d'autres bibliothèques tierces. Ce n'est que le début, l'eau est encore très profonde, tout le monde est invité à plonger profondément ensemble !

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Javascript est un langage tout à fait unique. Il est unique en termes d'organisation du code, de paradigme de programmation du code et de théorie orientée objet. La question de savoir si Javascript est un langage orienté objet a été débattue depuis un certain temps. Il y a évidemment une réponse depuis longtemps. Cependant, même si Javascript est dominant depuis vingt ans, si vous souhaitez comprendre les frameworks populaires tels que jQuery, Angularjs et même React, il suffit de regarder le « Black Horse Cloud Classroom JavaScript Advanced Framework ». Tutoriel vidéo de conception".

À l’ère de l’information d’aujourd’hui, les sites Web sont devenus un outil important permettant aux individus d’obtenir des informations et de communiquer. Un site Web réactif peut s’adapter à divers appareils et offrir aux utilisateurs une expérience de haute qualité, ce qui est devenu un point chaud dans le développement de sites Web modernes. Cet article expliquera comment utiliser PHP et AngularJS pour créer un site Web réactif afin d'offrir une expérience utilisateur de haute qualité. Introduction à PHP PHP est un langage de programmation open source côté serveur idéal pour le développement Web. PHP présente de nombreux avantages, tels que la facilité d'apprentissage, la multiplateforme, la riche bibliothèque d'outils et l'efficacité du développement.

Avec le développement continu d'Internet, les applications Web sont devenues un élément important de la construction de l'information d'entreprise et un moyen nécessaire au travail de modernisation. Afin de faciliter le développement, la maintenance et l'extension des applications Web, les développeurs doivent choisir un cadre technique et un langage de programmation adaptés à leurs besoins de développement. PHP et AngularJS sont deux technologies de développement Web très populaires. Ce sont respectivement des solutions côté serveur et côté client. Leur utilisation combinée peut considérablement améliorer l'efficacité du développement et l'expérience utilisateur des applications Web. Avantages de PHPPHP

Avec la popularité des applications Web, le framework front-end AngularJS est devenu de plus en plus populaire. AngularJS est un framework JavaScript développé par Google qui vous aide à créer des applications Web dotées de fonctionnalités d'application Web dynamiques. En revanche, pour la programmation backend, PHP est un langage de programmation très populaire. Si vous utilisez PHP pour la programmation côté serveur, utiliser PHP avec AngularJS apportera des effets plus dynamiques à votre site Web.

Avec le développement rapide de la technologie Web, l'application Web à page unique (SinglePage Application, SPA) est devenue un modèle d'application Web de plus en plus populaire. Par rapport aux applications Web multipages traditionnelles, le plus grand avantage de SPA est que l'expérience utilisateur est plus fluide et que la pression de calcul sur le serveur est également considérablement réduite. Dans cet article, nous expliquerons comment créer un SPA simple à l'aide de Flask et AngularJS. Flask est un Py léger

Avec la popularité d’Internet, de plus en plus de personnes utilisent le réseau pour transférer et partager des fichiers. Cependant, pour diverses raisons, l'utilisation de méthodes traditionnelles telles que FTP pour la gestion de fichiers ne peut pas répondre aux besoins des utilisateurs modernes. Par conséquent, la création d’une plateforme de gestion de fichiers en ligne facile à utiliser, efficace et sécurisée est devenue une tendance. La plate-forme de gestion de fichiers en ligne présentée dans cet article est basée sur PHP et AngularJS. Elle peut facilement effectuer des opérations de téléchargement, de modification, de suppression et autres, et fournit une série de fonctions puissantes, telles que le partage de fichiers, la recherche,

Avec la popularité et le développement d’Internet, le développement front-end est devenu de plus en plus important. En tant que développeurs front-end, nous devons comprendre et maîtriser divers outils et technologies de développement. Parmi eux, PHP et AngularJS sont deux outils très utiles et populaires. Dans cet article, nous verrons comment utiliser les deux outils pour le développement front-end. 1. Introduction à PHP PHP est un langage de script open source populaire côté serveur. Il convient au développement Web et peut fonctionner sur des serveurs Web et divers systèmes d'exploitation. Les avantages de PHP sont la simplicité, la rapidité et la commodité

Le contenu de cet article concerne l'introduction de base à AngularJS. Il a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer.
