web-dev-qa-db-fra.com

$ scope vs var dans AngularJS

J'utilise var et $ scope.varname et les deux fonctionnent très bien dans AngularJS. Je me demandais s'il y avait une différence entre les deux fonctionnellement et quelle était la meilleure pratique dans laquelle utiliser.

30
itamar

Oui! Les variables $scope se lient à la vue où comme var ne le fait pas et est local à la fonction dans laquelle elle a été déclarée!

var x = 3;
$scope.y = 3;

{{x}} - undefined
{{y}} - 3
60
tymeJV

1 - $ scope, est le glue entre votre contrôleur et votre vue/modèle, lorsque vous définissez une variable/fonction sur la portée $ du contrôleur, votre vue entière, que ce contrôleur contrôle! , peut voir cette variable/fonction. Là où une variable pure ne fonctionne que dans ce contrôleur, pas même la vue de ce contrôleur!

2- Tout ce qui a été défini dans le champ $ scope peut être manipulé depuis l’extérieur du contrôleur, tout au long de la Directives , Services , votre vue html ..., tout en pur variable n'est PAS;

7
Milad

Les implications techniques de l'utilisation de var et $scope ont été décrites par @tymeJV et d'autres. Je pense que la réponse logique suivante est la suivante: Quand dois-je l’utiliser?

TL; DR - si vous n'utilisez pas de variable dans une vue (par exemple, {{myVar}}), utilisez var.

La raison est double:

  1. Encapsulation - masque l'état qui n'est pas nécessaire à la vue. Cela empêchera les modifications involontaires de la variable.

  2. Performances (empêche les cycles de digestion supplémentaires) - Angular effectue une vérification de l'état "sale" des variables. La modification d'une variable non utilisée dans la vue peut entraîner inutilement des cycles de digestion supplémentaires. Dans une application avec quelques ng-repeats et un tas de montres, cela peut avoir un impact énorme.

7
Richard Clayton

Simplement parlé - toutes les variables que vous définissez sur $ scope, par exemple. dans votre contrôleur, sont disponibles dans votre balise HTML. au cas où vous auriez besoin d’une variable dans vos fonctions js, vous pouvez la déclarer avec var, elles ne sont disponibles que localement. Même avec les fonctions.

2
fischermatte

$ scope lie la valeur à la vue et var est la variable locale de l'application.

0
shiva samalla