Your idea to want to inherit from the controller is a good one, and I would recommend doing so by overriding what you need. The blog linked here explains two different methods that may be helpful.
To ensure the longevity of this solution, below are some key excerpts:
In AngularJS, using the $injector service makes it easy to request any defined dependency at any point. While this can be abused, it can also be quite useful. Here's an example of arranging controllers into an inheritance hierarchy starting with a generic parent controller:
function ParentController($scope, myService) {
// In this type of inheritance, properties are set in reverse order: child sets first, then parent. So, for a property meant to be overridden, it must check its own existence.
this.decorateScope = this.decorateScope || function () {
$scope.decorator = myService.getDecorator() + 2;
}
this.initialize = this.initialize || function () {
this.decorateScope();
}
initialize();
}
Next, we define a child controller inheriting from the parent above:
function ChildController($injector, $scope, myService) {
// Override the parent function while allowing further children to override it.
this.decorateScope = this.decorateScope || function () {
$scope.decorator = 44;
}
$injector.invoke(ParentController, this, {
$scope: $scope,
myService: myService
});
}
This method supports convenient mixins as well, working in a similar way to inheritance:
function ChildController($injector, $scope, myService, otherService) {
// Multiple controllers can be invoked this way, applying their properties and overrides in order of invocation.
$injector.invoke(MixinController, this, {
$scope: $scope,
otherService: otherService
});
$injector.invoke(ParentController, this, {
$scope: $scope,
myService: myService
});
}