Оба имеют свое применение. Сначала немного истории ...
$ scope - это «классическая» методика, тогда как «controller as» появился намного раньше (официально, начиная с версии 1.2.0, хотя до этого он появлялся в нестабильных предварительных выпусках).
Оба работают отлично, и единственный неправильный ответ - смешивать их в одном приложении без явной причины. Честно говоря, смешивание их будет работать, но это только добавит путаницы. Так что выбирайте один и катитесь с ним. Самое главное, чтобы быть последовательным.
Который из? Это зависит от вас. Есть еще много примеров использования $ scope, но "controller as" также набирает обороты. Один лучше другого? Это спорно. Так как вы выбираете?
комфорт
Я предпочитаю «контроллер как», потому что мне нравится скрывать область видимости $ и открывать элементы из контроллера для просмотра через промежуточный объект. Установив это. *, Я могу выставить на экран только то, что я хочу выставить из контроллера. Вы также можете сделать это с помощью $ scope, я просто предпочитаю использовать стандартный JavaScript для этого. На самом деле, я кодирую это так:
var vm = this;
vm.title = 'some title';
vm.saveData = function(){ ... } ;
return vm;
Это кажется мне чище и позволяет легко увидеть, что подвергается воздействию. Обратите внимание, что я называю переменную, которую я возвращаю, "vm", что означает viewmodel. Это просто мое соглашение.
С $ scope я могу делать то же самое, поэтому я не добавляю и не отвлекаю технику.
$scope.title = 'some title';
$scope.saveData = function() { ... };
Так что решать вам там.
впрыскивание
С $ scope мне нужно ввести $ scope в контроллер. Мне не нужно делать это с контроллером как, если только мне это не нужно по какой-то другой причине (например, $ broadcast или watches, хотя я стараюсь избегать watches в контроллере).
ОБНОВЛЕНИЕ
Я написал этот пост о 2 вариантах:
http://www.johnpapa.net/do-you-like-your-angular-controllers-with-or-without-sugar/