I like the fact that the activation code is in its own function, but invoking it straight away is pretty much the same as having logic in the constructor. This means that if you want to unit test the method save you'll need to make sure that dataService.getAvengers is stubbed properly.

I wanted to expose activate and have it called by someone else rather than the AvengersViewModel:

A better approach

I remembered seeing someone using require to make the directive's own controller available as the fourth parameter of the link function. Apparently, you can even omit the require property altogether, and you'll have access to the directive's controller instance: