Les deux ont leur utilité. Tout d'abord, un peu d'histoire ...
$ scope est la technique "classique" tandis que "controller as" est beaucoup plus récent (à partir de la version 1.2.0 officiellement bien qu'il apparaissait dans les pré-versions instables avant cela).
Les deux fonctionnent parfaitement bien et la seule mauvaise réponse est de les mélanger dans la même application sans raison explicite. Franchement, les mélanger fonctionnera, mais cela ne fera qu'ajouter à la confusion. Alors choisissez-en un et roulez avec. La chose la plus importante est d'être cohérent.
Laquelle? Cela dépend de vous. Il existe de nombreux autres exemples de $ scope, mais "controller as" prend également de l'ampleur. Est-ce que l'un est meilleur que l'autre? C'est discutable. Alors, comment choisissez-vous?
Confort
Je préfère le "contrôleur en tant que" car j'aime cacher la portée $ et exposer les membres du contrôleur à la vue via un objet intermédiaire. En définissant ceci. *, Je peux exposer exactement ce que je veux exposer du contrôleur à la vue. Vous pouvez le faire avec $ scope aussi, je préfère simplement utiliser JavaScript standard pour cela. En fait, je le code comme ceci:
var vm = this;
vm.title = 'some title';
vm.saveData = function(){ ... } ;
return vm;
Cela me semble plus propre et permet de voir facilement ce qui est exposé à la vue. Remarquez que je nomme la variable que je renvoie "vm", qui signifie viewmodel. C'est juste ma convention.
Avec $ scope, je peux faire les mêmes choses, donc je n'ajoute ni n'altère la technique.
$scope.title = 'some title';
$scope.saveData = function() { ... };
Donc, c'est à vous là-bas.
Injection
Avec $ scope, j'ai besoin d'injecter $ scope dans le contrôleur. Je n'ai pas à le faire avec le contrôleur car, sauf si j'en ai besoin pour une autre raison (comme $ broadcast ou montres, bien que j'essaie d'éviter les montres dans le contrôleur).
MISE À JOUR
J'ai écrit cet article sur les 2 choix:
http://www.johnpapa.net/do-you-like-your-angular-controllers-with-or-without-sugar/