You can make both states children of a common parent abstract state. The only negative would be that the abstract state must have a URL, which would appear. The URL could be something simple (e.g. '/a') or something descriptive of both modules.
Why are the views sharing a controller? Are the functions implemented in the controller? Common current Angular coding standards are for thin controllers that map functions and object stored in factories/services to the view. Presumably each of your states would have a unique controller that mapped the functions from one or more factories to the view. The controller then would only contain mappings to variables or functions actually used in the view.
However, if you most your can add a controller to a controller if you define the function separately:
angular.module('MyApp', [])
.controller('Ctrl1', Ctrl1)
.controller('Ctrl2', Ctrl2)
.controller('Ctrl3', Ctrl3);
function Ctrl1() {
var vm = this;
vm.name = "Ctrl1name";
vm.fn = function() {
console.log("I am controller Ctl1")
};
}
function Ctrl2() {
var vm = this;
vm.name = "Ctrl2name";
vm.fn = function() {
console.log("I am controller Ctl2")
};
}
function Ctrl3() {
var vm = this;
vm.ct1 = new Ctrl1();
vm.ct2 = new Ctrl2();
}
It is in this Codepen: http://codepen.io/StretchKids/pen/gPoERN/?editors=0010
As you can see, Ctrl3's function has variables set to a new version of Ctrl1's and Ctrl2's functions. The internal variables are accessed through that variable