Any other controller would be easy to $scope.$watch a changing value. ES6 means that said watch has to be in the constructor. 1

Okay, easy enough to pick up on. BUT:

constructor($dependancies, $scope){
    this.$dependancies = $dependancies;
    $scope.$watch('thingToWatch', (value) => {
        //do stuff
    }
}

looks fine, but thingToWatch should be part of this. Unfortunately the $watch won’t see it. this no longer exists for this, but the controller name does. In the context of how We/I am writing the controller constructor, it’s controllerAs: 'vm' in the directive.

The $watch then becomes:

constructor($dependancies, $scope){
    this.$dependancies = $dependancies;
    $scope.$watch('vm.thingToWatch', (value) => {
        //do stuff
    }
}


  1. The context for this is that we as a team are currently writing directives and their controllers as separate files and our directives largely don’t have a link function.