251 votes

Angulaire : Dois-je utiliser ceci ou $scope

Il y a deux modèles à utiliser pour accéder aux fonctions de contrôleur: "ceci" et "$champ d'application". Qui dois-je utiliser et quand? Je comprends "ce" est réglé à la commande et "$scope" est un objet dans le champ d'application de la chaîne de points de vue. Mais avec la nouvelle "le Contrôleur du Var" la syntaxe, vous pouvez facilement utiliser. Donc ce que je demande est-ce qui est le mieux et ce qui est de la direction pour l'avenir?

Exemple:

  1. L'utilisation de "ce":

    function UserCtrl() {
      this.bye = function() { alert('....'); };
    }
    
    <body ng-controller='UserCtrl as uCtrl'>
      <button ng-click='uCtrl.bye()'>bye</button>
    
  2. À l'aide de $portée

    function UserCtrl($scope) {
        $scope.user = function () { alert('....'); };
    }
    
    <body ng-controller='UserCtrl'>
        <button ng-click='bye()'>bye</button>
    

Personnellement, je trouve la ce.nom plus facile sur l'oeil et plus naturel par rapport à d'autres Javascript OO modèles.

Conseils s'il vous plaît?

229voto

John Papa Points 7845

Les deux ont leurs usages. Tout d'abord, un peu d'histoire ...

$champ d'application est le "classique" technique", alors que "contrôleur" est beaucoup plus récente (à partir de la version 1.2.0 officiellement bien qu'il fait apparaître dans unstable pré-versions antérieures à la présente).

Les deux fonctionnent parfaitement bien et la seule mauvaise réponse, c'est de mélanger dans la même application sans un but explicite. Franchement, les mélanger au travail, mais il ne fera qu'ajouter à la confusion. Donc en choisir un et de rouler avec elle. La chose la plus importante est d'être cohérent.

Lequel? Cela dépend de vous. Il y a beaucoup plus d'exemples de $portée, mais "contrôleur" est à ramasser à la vapeur. Est-ce mieux que les autres? C'est discutable. Alors, comment choisissez-vous?

Confort

Je préfère le "contrôleur" parce que j'aime cacher le $scope et en exposant les membres du contrôleur à la vue par l'intermédiaire d'un objet. Par ce paramètre.*, Je peux exposer simplement ce que je veux exposer à partir du contrôleur à la vue. Vous pouvez le faire avec $portée trop, je préfère juste à utiliser JavaScript standard pour cela. En fait, je code comme ceci:

var vm = this;

vm.title = 'some title';
vm.saveData = function(){ ... } ;

return vm;

C'est un nettoyant pour moi et il est facile de voir ce qui est exposé à la vue. Avis j'ai le nom de la variable que je revienne "vm" , qui signifie viewmodel. C'est juste mon convention.

Avec $portée, je peux faire les mêmes choses, donc je ne suis pas d'ajout ou de porter atteinte à la technique.

$scope.title = 'some title';
$scope.saveData = function() { ... };

Donc, son jusqu'à vous.

Injection

Avec $champ d'application j'ai besoin d'injecter $champ d'application dans l'automate. Je n'ai pas à le faire avec le contrôleur, à moins que j'en ai besoin pour une autre raison (comme $de diffusion ou de montres, bien que j'essaie d'éviter de montres dans le contrôleur).

Mise à JOUR J'ai écrit ce post sur les 2 choix: http://www.johnpapa.net/do-you-like-your-angular-controllers-with-or-without-sugar/

40voto

Roy Truelove Points 6532

Mon opinion est que « this » en javascript a suffisamment de problèmes sur son propre, et que l’ajout de l’autre sens / utiliser pour elle pas une bonne idée.

Je voudrais utiliser $scope, par souci de clarté.

MISE À JOUR

Il y a maintenant la syntaxe « contrôleur », discutée ici. Je ne suis pas un fan, mais maintenant que c’est une construction de AngularJS plus « officielle » il mérite une certaine attention.

6voto

AlanW Points 59

À l’aide de « this » semble être nouvelle à partir de Google i/o 2013

http://m.youtube.com/watch?v=HCR7i5F5L8c

En outre, vérifiez cette réponse : cette vs $scope dans contrôleurs de AngularJS

1voto

Nick Manning Points 643

Les deux fonctionnent, mais si vous appliquez ce qui est approprié pour l’étendue de $scope, et si vous appliquez ce qui est approprié pour le contrôleur au contrôleur, votre code sera facile à entretenir. Pour les gens qui disent « Ugh il suffit d’utiliser portée oublier ce contrôleur comme syntaxe »... Il peut fonctionner de la même, mais je me demande comment vous serez en mesure de maintenir une application énorme sans perdre la trace des choses.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X