Entrambi hanno i loro usi. Innanzitutto, un po 'di storia ...
$ scope è la tecnica "classica", mentre "controller as" è molto più recente (a partire dalla versione 1.2.0 ufficialmente, sebbene prima apparisse in pre-release instabili).
Entrambi funzionano perfettamente bene e l'unica risposta sbagliata è mescolarli nella stessa app senza un motivo esplicito. Francamente, mescolarli funzionerà, ma aggiungerà solo confusione. Quindi scegline uno e rotola con esso. La cosa più importante è essere coerenti.
Quale? Dipende da te Ci sono molti altri esempi di $ scope, ma anche "controller as" sta prendendo piede. Uno è migliore dell'altro? È discutibile. Quindi come scegli?
Comfort
Preferisco il "controller come" perché mi piace nascondere l'ambito $ ed esporre i membri dal controller alla vista tramite un oggetto intermedio. Impostando questo. *, Posso esporre esattamente ciò che voglio esporre dal controller alla vista. Puoi farlo anche con $ scope, preferisco semplicemente usare JavaScript standard per questo. In effetti, lo codice in questo modo:
var vm = this;
vm.title = 'some title';
vm.saveData = function(){ ... } ;
return vm;
Questo mi sembra più pulito e rende facile vedere cosa viene esposto alla vista. Notare che ho chiamato la variabile che restituisco "vm", che sta per viewmodel. Questa è solo la mia convenzione.
Con $ scope posso fare le stesse cose, quindi non sto aggiungendo o sminuendo la tecnica.
$scope.title = 'some title';
$scope.saveData = function() { ... };
Quindi tocca a te lì.
Iniezione
Con $ scope ho bisogno di iniettare $ scope nel controller. Non devo farlo con il controller come, a meno che non ne abbia bisogno per qualche altro motivo (come $ broadcast o watch, anche se cerco di evitare gli watch nel controller).
AGGIORNAMENTO
Ho scritto questo post sulle 2 scelte:
http://www.johnpapa.net/do-you-like-your-angular-controllers-with-or-without-sugar/