Почему $scope это плохо?
В своей практике натыкался на некоторые неудобства связаные с тем что дочерние scope прототипно наследуют родительские при этом получается что все переменные объявленые выше присутствуют в самом вложеном scope. Если у вас там есть одинаковые названия переемнных то легко словить ошибку изменив не ту переменную. Начиная работать с ui-router с кучей вложеныйх состояний я сразу на это нарвался по неопытности. С синтаксисом ControllerAs, как я понимаю, ваши данные лежат в контроллере а не в scope и таких ошибок не возникает.
p.s. я не профи по ангуляру, просто мысли в слух :)
Может речь была о $rootScope? Если это так, то использовать $rootScope, это примерно тоже самое что использовать глобальные переменные.