Vous devez être au courant sur la façon Angulaire de travaux dans le but de le comprendre.
Digest cycle et $portée
D'abord et avant tout, Angulaire définit un concept d'une sorte de digest du cycle. Ce cycle peut être considéré comme une boucle, au cours de laquelle Angulaire vérifie si il y a des changements de toutes les variables, regardé par tous les $scopes
. Donc, si vous avez $scope.myVar
défini dans votre contrôleur et cette variable a été marqué pour être regardé, puis vous indiquez explicitement Angulaire de surveiller les changements de l' myVar
dans chaque itération de la boucle.
D'un naturel suivi de la question serait: est tout attaché $scope
d'être regardé?
Heureusement, non. Si vous surveillez les changements de chaque objet dans votre $scope
, puis rapidement digérer boucle prendrait des années pour évaluer et vous serait vite rencontrer des problèmes de performance. C'est pourquoi Angulaire de l'équipe nous a donné deux façons de déclarer certains $scope
variable comme étant regardé (lire ci-dessous).
$montre permet d'écouter $à des changements de périmètre
Il y a deux façons de déclarer une $scope
variable comme étant regardé.
- En l'utilisant dans votre modèle par l'expression:
<span>{{myVar}}</span>
- En ajoutant manuellement via
$watch
service
Ad 1)
C'est le scénario le plus commun et je suis sûr que vous avez vu avant, mais vous ne saviez pas que cela a créé une montre en arrière-plan. Oui, il avait! À l'aide Angulaire directives (comme ng-repeat
) peuvent également créer implicite montres.
Ad 2)
C'est la façon dont vous créez vos propres montres. $watch
service vous permet d'exécuter du code lorsque la valeur attachée à l' $scope
a changé. Il est rarement utilisé, mais il est parfois utile. Par exemple, si vous souhaitez exécuter du code à chaque fois 'mavar' des modifications, vous pouvez effectuer les opérations suivantes:
function MyController($scope) {
$scope.myVar = 1;
$scope.$watch('myVar', function() {
alert('hey, myVar has changed!');
});
$scope.buttonClicked = function() {
$scope.myVar = 2; // This will trigger $watch expression to kick in
};
}
$s'appliquent permet d'intégrer les modifications apportées à la digérer cycle
Vous pouvez penser à de la $apply
fonctionner comme un mécanisme d'intégration. Vous voyez, chaque fois que vous changez de certaines regardé variable attachée à l' $scope
objet directement, Angulaire savez que le changement s'est produit. C'est parce que Angulaires savait déjà pour la surveillance de ces changements. Alors si cela se produit dans le code géré par le cadre, le recueil de cycle.
Cependant, parfois, vous voulez changer un peu de valeur à l'extérieur de l'angle monde et de voir les modifications se propagent normalement.
Tenez compte de ceci: vous avez un $scope.myVar
de la valeur qui sera modifié dans un jQuery $.ajax()
gestionnaire. Cela se fera à un certain moment dans l'avenir. Angulaire ne peut pas attendre pour que cela se produise, car il n'a pas été invité à attendre sur jQuery.
Pour le résoudre, $apply
a été introduit. Il vous permet de démarrer le cycle de la digestion de manière explicite. Toutefois, vous devez l'utiliser uniquement pour la migration de certaines données Angulaire (intégration avec d'autres frameworks), mais ne jamais utiliser cette méthode combinée avec la régulière Angulaire de code, comme Angulaire lèvera une erreur alors.
Comment tout cela est lié à DOM?
Eh bien, vous devriez vraiment suivre le tutoriel de nouveau, maintenant que vous savez tout cela. Le digest cycle assurez-vous que l'INTERFACE utilisateur et le code JS reste synchronisé, par l'évaluation de chaque observateur connectée à l' $scope
s tant que rien ne change. Si plus de changements se produisent dans le recueil de la boucle, alors il est considéré comme terminé.
Vous pouvez joindre des objets à l' $scope
objet soit de manière explicite dans le Contrôleur, ou en les déclarant en {{expression}}
formulaire directement dans la vue.
Espoir qui aide à clarifier certaines connaissances de base à propos de tout cela.
Lectures supplémentaires: