I strongly disagree on this. Avoiding $scope and using instead simple constructors to create controllers has many other advantages: you’re promoting namespacing when creating the scope, you’re getting yourself used to Angular 2, and making your code more understandable to people who do not know Angular.
$scope was premature bad design and the angular team realised it at some point.
Also, while I agree that directives should never have nested controllers, I also realized in my experience that when creating non trivial apps with Angular it’s almost impossible avoiding nested controllers. The ways around it usually are hacks.