Когда использовать $scope а когда ControllerAs?
Controller As желательно всегда, а уж инджектить или нет в контроллер $scope зависит от того, нужно ли вам:
 - подписываться на события
 - ватчеры в контроллерах
Случай когда вы именно хотите из контроллера задать что-то что должно наследоваться во всех скоупах я нарочно опускаю ибо так делать не стоит. Если уж хотите, это можно сделать в run модуля через $rootScope. Но не из контроллера, они по возможности должны быть изолированными и не должны зависить от иерархии.
Если вам удается обходиться без этого и все это берут на себя директивы и сервисы - славно, значит верной дорогой идете... скорее всего.
Единственое что... почему вы пишите SomeController as vm... По идее вы должны писать там алиас контроллера что бы было понятно у кого методы дергаются. Понятно в смысле не ангуляру а вам.
На https://docs.angularjs.org/api/ng/directive/ngCont... пишут, что:Используя "Controller as" становится очевидным к какому контроллеру вы обращаетесь в шаблоне, когда несколько контроллеров.Более лёгкий доступ к свойствам и методам.Поскольку всегда существует .  , вам не придется беспокоиться о багах в наследование.
И вот еще обсуждение stackoverflow.com/questions/24330266/when-to-use-s... самому интересно и сейчас буду читать.