Oba mają swoje zastosowania. Po pierwsze, trochę historii ...
$ scope jest „klasyczną” techniką, podczas gdy „kontroler jako” jest znacznie nowszy (od wersji 1.2.0 oficjalnie, chociaż wcześniej pojawiał się w niestabilnych wersjach wstępnych).
Oba działają idealnie dobrze, a jedyną złą odpowiedzią jest mieszanie ich w tej samej aplikacji bez wyraźnego powodu. Szczerze mówiąc, mieszanie ich będzie działać, ale tylko zwiększy zamieszanie. Więc wybierz jeden i rzuć nim. Najważniejsze jest zachowanie spójności.
Który? To zależy od Ciebie. Istnieje wiele innych przykładów $ scope, ale „kontroler jako” również zbiera parę. Czy jedno jest lepsze od drugiego? To jest dyskusyjne. Jak więc wybierasz?
Komfort
Wolę „kontroler jako”, ponieważ lubię ukrywać zakres $ i wystawiać członków z kontrolera na widok za pośrednictwem obiektu pośredniego. Ustawiając to. *, Mogę ujawnić tylko to, co chcę pokazać ze sterownika do widoku. Możesz to zrobić również za pomocą $ scope, po prostu wolę używać do tego standardowego JavaScript. W rzeczywistości koduję to w ten sposób:
var vm = this;
vm.title = 'some title';
vm.saveData = function(){ ... } ;
return vm;
Wydaje mi się to czystsze i ułatwia zobaczenie, co jest wystawiane na widok. Zauważ, że nazywam zmienną, którą zwracam, „vm”, co oznacza viewmodel. To tylko moja konwencja.
Z $ scope mogę robić te same rzeczy, więc nie dodawam ani nie umniejszam techniki.
$scope.title = 'some title';
$scope.saveData = function() { ... };
To zależy od ciebie.
Iniekcja
Z $ scope muszę wprowadzić $ scope do kontrolera. Nie muszę tego robić z kontrolerem, chyba że potrzebuję go z innego powodu (np. $ Broadcast lub zegarki, chociaż staram się unikać zegarków w kontrolerze).
AKTUALIZACJA
Napisałem ten post o 2 opcjach:
http://www.johnpapa.net/do-you-like-your-angular-controllers-with-or-without-sugar/